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

Wyraźne liczby TSQL

Może być konieczne użycie tabeli tymczasowej lub zmiennej tabeli, jak pokazano poniżej

     DECLARE @t TABLE (
    ID INT
    ,SuppressionTypeID INT
    ,PersonID INT
    )

INSERT INTO @t
SELECT 1
    ,1
    ,123

UNION ALL

SELECT 2
    ,1
    ,456

UNION ALL

SELECT 3
    ,2
    ,456

DECLARE @t1 TABLE (
    ID INT
    ,SuppressionTypeID INT
    ,PersonID INT
    ,firstid INT
    )

INSERT INTO @t1
SELECT *
    ,NULL
FROM @t

UPDATE t1
SET t1.firstid = t2.firstid
FROM @t1 AS t1
INNER JOIN (
    SELECT personid
        ,min(SuppressionTypeID) AS firstid
    FROM @t1
    GROUP BY personid
    ) AS t2 ON t1.PersonID = t2.PersonID

SELECT coalesce(t2.firstid, t1.SuppressionTypeID) AS SuppressionTypeID
    ,count(DISTINCT t2.personid) AS count
FROM @t1 AS t1
LEFT JOIN @t1 AS t2 ON t1.personid = t2.personid
    AND t1.SuppressionTypeID = t2.firstid
GROUP BY coalesce(t2.firstid, t1.SuppressionTypeID)

Wynik to

SuppressionTypeID count
----------------- -----------
1                 2
2                 0


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pierwsze spojrzenie na nowy estymator kardynalnych serwerów SQL Server

  2. Kroczące odchylenie standardowe w SQL Server

  3. Jak używać ciągu znaków oddzielonych przecinkami w dynamicznym zapytaniu w SQL

  4. Aktualizacja SQL Server 2000 do 2005 lub 2008 — DTS do SSIS

  5. Podzapytanie używające Exists 1 lub Exists *