DESeq2 compare within a condition
Welcome to the world of all possible pairwise comparisons in DESeq2 ! 

So the easiest way is to create another group in your data frame, first I simulate some sensible counts:

counts = counts(makeExampleDESeqDataSet(m=48))
design = expand.grid(id=1:3,
phenotype=rep(c("sick","healthy"),each=2),
type = rep(c("A","B"),2))


And you make a group that is a combination of phenotype and type:

design$group = paste(design$phenotype,design$type,sep="_")


Run DESeq2, including id:

dds &lt;- DESeqDataSetFromMatrix(countData=counts, colData=design, 
design = ~ id + group)
keep &lt;- rowSums(counts(dds)) &gt;= 10
dds &lt;- dds[keep,]
dds &lt;- DESeq(dds)
res &lt;- results(dds, contrast=c("group", "healthy_A", "sick_A"))


So this compares only healthy_A with sick_A.. hopefully this is what you need... The other option (normal statistical) is to fit a model with interaction, but I think this is easier to explain and interpret. 

Another question you might have is why not do two separate analysis for A and B, I think it's sometimes better if you model the variance with all available data, given the limited number of replicates.