У вас есть повторяющиеся имена столбцов в таблице 2.Предполагая, что первый столбец таблицы 2 является «геном», а второй столбец - «геном 2»:
Select *
, [Count]
/ ( Coalesce(Gene1.Total,0) + Coalesce(Gene2.Total,0) - Coalesce(Table2.Count,0))
From Table2
Left Join (
Select T1.gene, Count(*) As Total
From Table1 As T1
Group By T1.gene
) As Gene1
On Gene1.gene = Table2.gene
Left Join (
Select T2.gene, Count(*) As Total
From Table1 As T2
Group By T2.gene
) As Gene2
On Gene2.gene = Table2.gene2
Where ( Coalesce(Gene1.Total,0) + Coalesce(Gene2.Total,0) - Coalesce(Table2.Count,0)) > 0
Конечно, если у вас много данных, это не будет самый быстрый запрос вмир.
С SQL Server 2008 вы можете написать его немного чище, используя выражение для общей таблицы, например:
With CountByGene As
(
Select T1.gene, Count(*) As Total
From Table1 As T1
Group By T1.gene
)
Select *
, [Count]
/ ( Coalesce(Gene1.Total,0) + Coalesce(Gene2.Total,0) - Coalesce(Table2.Count,0))
From Table2
Left Join CountByGene As Gene1
On Gene1.gene = Table2.gene
Left Join CountByGene As Gene2
On Gene2.gene = Table2.gene2
Where ( Coalesce(Gene1.Total,0) + Coalesce(Gene2.Total,0) - Coalesce(Table2.Count,0)) > 0