sql >> Database teknologi >  >> RDS >> Sqlserver

COUNT(DISTINCT) i flere kolonner i SQL Server 2008

Du kan bruge en cross apply og 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 du kan lave en union all i en underforespørgsel.

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. Skal id eller tidsstempel bruges til at bestemme rækkefølgen for oprettelse af rækker i en databasetabel? (givet mulighed for forkert indstillet systemur)

  2. Langsomme Postgres 9.3-forespørgsler

  3. Hjælp venligst med STRING_SPLIT-forbedringer

  4. Django + MySQL - Ukendt kodning:utf8mb4