MS SQL 2014 - 排名

MS SQL 2014 - rank

我需要按照每个客户获得一张发票的方式对行进行排名,除非将单独的发票值设置为 1 - 那么这个设备就会在单独的发票上。非常感谢任何帮助。

CREATE TABLE #Tmp (DeviceId INT, CustomerId INT, SeparateInv TINYINT)
INSERT INTO #Tmp VALUES (10, 1, 0)
INSERT INTO #Tmp VALUES (11, 1, 0)
INSERT INTO #Tmp VALUES (12, 1, 1)
INSERT INTO #Tmp VALUES (13, 1, 1)
INSERT INTO #Tmp VALUES (17, 2, 0)
INSERT INTO #Tmp VALUES (19, 2, 0)

CREATE TABLE #TmpRank (DeviceId INT, CustomerId INT, SeparateInv TINYINT, InvoiceId INT)
INSERT INTO #TmpRank VALUES (10, 1, 0, 1)
INSERT INTO #TmpRank VALUES (11, 1, 0, 1)
INSERT INTO #TmpRank VALUES (12, 1, 1, 2)
INSERT INTO #TmpRank VALUES (13, 1, 1, 3)
INSERT INTO #TmpRank VALUES (17, 2, 0, 4)
INSERT INTO #TmpRank VALUES (19, 2, 0, 4)

此致, 普热梅克

SELECT *, DENSE_RANK() OVER (ORDER BY CustomerId, CASE WHEN SeparateInv = 1 THEN DeviceId END)
FROM #Tmp

这里的思路是,对于SeparateInv = 1,需要为每个CustomerId/DeviceId组合生成一张发票,但是当SeparateInv = 0时,需要一张发票为每个 CustomerId 生成。这些可以组合在一个表达式中:需要为每个 CustomerId/SeparateInvDeviceId 组合生成发票,其中 SeparateInvDeviceId 是根据 SeparateInvDeviceId 计算得出的.