CREATE TABLE #TempTBL
(
ID INT IDENTITY(1,1),
KC1 varchar(10),
KC2 varchar(10),
KC3 varchar(10),
NC1 int,
NC2 money,
IsON bit
)
INSERT INTO #TempTBL
SELECT 'ABC','MNO','XYZ',1,1.00,1
UNION ALL
SELECT 'ABC','MNO','XYZ',1,1.00,0
UNION ALL
SELECT 'ABD','MNO','XYZ',1,1.10,1
UNION ALL
SELECT 'ABD','MNO','XYZ',1,1.10,0
UNION ALL
SELECT 'ABD','MNO','XYZ',2,1.00,0
UNION ALL
SELECT 'ABE','MNO','XYZ',1,1.10,1
SELECT * FROM #TempTBL
DROP TABLE #TempTBL
http://ideone.com/HSLynuT-SQL |计数和排名
我试图找到基于KC1,KC2,以及KC-3(键列)唯一的行号。然后,我试图为每条独特记录推导出IsOn = 1和IsOn = 0的记录数。为了更好地理解,下面是我期望的输出。 (我试图派生RowNum,OnCnt和offCnt字段)。
ID KC1 KC2 KC3 NC1 NC2 IsON RowNum OnCnt OffCnt
1 ABC MNO XYZ 1 1 1 1 1 1
2 ABC MNO XYZ 1 1 0 1 1 1
3 ABD MNO XYZ 1 1.1 1 2 1 2
4 ABD MNO XYZ 1 1.1 0 2 1 2
5 ABD MNO XYZ 2 1 0 2 1 2
6 ABE MNO XYZ 1 1.1 1 3 1 0
现在你开始说展示你的工作,我只想说,我列出的TBL的部分是一个很大的查询我建立的部分之前。我只是无法想出这三件事的逻辑(如果我们认为OnCnt和OffCnt“相同”,则为2)。
谢谢!
GOALLL! thx,这工作!有时间搞清楚实施。 :)谢谢Goat CO。Cheers – 007
调查逻辑的时间。 Dense_rank ...为什么没有分区,为什么按键列排序?对于OffCNT,使用COALESCE是为了处理IsON = 0时没有记录的记录吗?相反,我使用OffCNT = SUM(CASE WHEN ISON = 0 THEN 1 ELSE 0 END)OVER(PARTITION BY KC1,KC2,KC-3)...你预见到任何错误(S)? – 007
排名功能的排名依据顺序,领带被授予同一级别,所以如果你为了你的3键字段,你会得到每这些字段的组合唯一的编号,通过分区将定义一组要为其开始排名例如,如果您想为每个团队对从最好到最差的玩家进行排名,这将非常有用。你对“COALESCE()”是正确的,只是返回'0'而不是'NULL'。你的ELSE将会达到同样的效果。 –