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
是根据 SeparateInv
和 DeviceId
计算得出的.
我需要按照每个客户获得一张发票的方式对行进行排名,除非将单独的发票值设置为 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
是根据 SeparateInv
和 DeviceId
计算得出的.