Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Hitungan Berbeda TSQL

Anda mungkin perlu menggunakan tabel sementara atau variabel tabel seperti yang ditunjukkan di bawah ini

     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)

Hasilnya adalah

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. Bagaimana menemukan baris berurutan berdasarkan nilai kolom?

  2. Bagaimana cara mengganti nama sesuatu di SQL Server yang memiliki tanda kurung siku di namanya?

  3. Klausa ORDER BY tidak valid dalam tampilan, fungsi sebaris, tabel turunan

  4. sql server partisi tabel harian otomatis

  5. SQL Server 2016:Buat Login