sql >> Databasteknik >  >> RDS >> Sqlserver

COUNT(DISTINCT) i flera kolumner i SQL Server 2008

Du kan använda en cross apply och values .

select T1.AssetId,
       count(distinct T2.ID) TotalIds,
       sum(case T2.InStock when 0 then 0 else 1 end) AvailableIds 
from YourTable as T1
  cross apply(values(T1.MyId, T1.InStock),
                    (T1.TheirId, 0)
             ) as T2(ID, InStock)
group by T1.AssetId  

SE-Data

Eller så kan du göra en union all i en underfråga.

select T.AssetId,
       count(distinct T.ID) TotalIds,
       sum(case T.InStock when 0 then 0 else 1 end) AvailableIds 
from (
     select AssetId, MyId as ID, InStock
     from YourTable
     union all
     select AssetID, TheirId, 0
     from YourTable
     ) as T
group by T.AssetId  


  1. Mysql gå med och summan fördubblar resultatet

  2. Döljer SQL Server-instans över nätverket

  3. Skillnad mellan databas och schema

  4. Beställning av strängarna samtidigt som man sammanfogar i orakel