sql >> Databáze >  >> RDS >> Sqlserver

COUNT(DISTINCT) ve více sloupcích v SQL Server 2008

Můžete použít cross apply a 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

Nebo můžete provést union all v dílčím dotazu.

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. Získání maxima bez seskupování

  2. Použijte PARSENAME() k vrácení části názvu objektu v SQL Server

  3. Jak připojit více databází v PHP, MYSQLi &PDO

  4. Spojovníky v názvech sloupců v MySQL DB