Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

COUNT(DISTINCT) w wielu kolumnach w SQL Server 2008

Możesz użyć cross apply i 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-Dane

Lub możesz zrobić union all w podzapytaniu.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego otrzymuję te różne wyniki z dwóch zapytań SQL?

  2. Otrzymujesz błąd podczas wykonywania dynamicznego sql w ramach funkcji (SQL Server)?

  3. Instrukcja SQL Update Replace

  4. Jak mogę pobrać listę parametrów z procedury składowanej w SQL Server?

  5. Jak zrozumieć typ danych geograficznych serwera SQL?