Sql server SQL Count Distinct带有多个条件,以返回所有列、所有记录
您好,我正在尝试计算给定条件的不同值的数量,但是,我需要查询结果包括所有列和记录。基本上,distinct count结果将作为一个新列添加到原始表中,并且只对每一行重复 这就是我目前所拥有的,我无法进入下一步。我有三张桌子连在一起。考虑到R.ID(来自tbl_reqtype)和R.DocumentNo(来自tbl_reqtype)是相同的,我想计算tbl_trantype中唯一的T.CostCenterSql server SQL Count Distinct带有多个条件,以返回所有列、所有记录,sql-server,tsql,Sql Server,Tsql,您好,我正在尝试计算给定条件的不同值的数量,但是,我需要查询结果包括所有列和记录。基本上,distinct count结果将作为一个新列添加到原始表中,并且只对每一行重复 这就是我目前所拥有的,我无法进入下一步。我有三张桌子连在一起。考虑到R.ID(来自tbl_reqtype)和R.DocumentNo(来自tbl_reqtype)是相同的,我想计算tbl_trantype中唯一的T.CostCenter SELECT M.[ID] AS EMLID ,R.[ID] AS Req
SELECT M.[ID] AS EMLID
,R.[ID] AS RequestID
,T.[ID] AS TransactionID
,R.[DocumentNo]
,T.[CostCenter]
,ROW_NUMBER() OVER (PARTITION BY R.ID, R.DocumentNo, T.CostCenter ORDER BY T.ID) NoOfCostCenter
FROM (tbl_Info M
INNER JOIN tbl_reqtype R ON M.ID = R.EMLID)
INNER JOIN tbl_trantype T ON R.ID = T.RID
下面是我希望的结果
EMLID RequestID TransactionID DocumentNo CostCenter NoOfCostCenter
4000001 11 1 777777777 1515151 2
4000001 11 2 777777777 1515151 2
4000001 11 3 777777777 4515151 2
4000003 12 4 999999999 7277477 5
4000003 12 5 999999999 7277477 5
4000003 12 6 999999999 8722724 5
4000003 12 7 999999999 7272726 5
4000003 12 8 999999999 2652627 5
4000003 12 9 999999999 6353636 5
EMLID RequestID TransactionID DocumentNo成本中心NoOfCostCenter
4000001 11 1 777777777 1515151 2
4000001 11 2 777777777 1515151 2
4000001 11 3 777777777 4515151 2
4000003 12 4 999999999 7277477 5
4000003 12 5 999999999 7277477 5
4000003 12 6 999999999 8722724 5
4000003 12 7 999999999 7272726 5
4000003 12 8 999999999 2652627 5
4000003 12 9 999999999 6353636 5
看来,你们很接近了。我同意这个问题:
SELECT M.[ID] AS EMLID
,R.[ID] AS RequestID
,T.[ID] AS TransactionID
,R.[DocumentNo]
,T.[CostCenter]
,COUNT(DISTINCT T.CostCenter) OVER (PARTITION BY R.ID, R.DocumentNo) NoOfCostCenter
FROM (tbl_Info M
INNER JOIN tbl_reqtype R ON M.ID = R.EMLID)
INNER JOIN tbl_trantype T ON R.ID = T.RID
我只是将行编号
替换为计数
(并删除了与计数无关的顺序,并从分区中删除了我们正在计数的内容)。
但我不能确定,因为你没有给出输入的细节
Edit:很抱歉,我忘记了这是T-SQL,而不是Oracle DB SQL,因此DISTINCT
子句将不起作用。
您可能会发现这个答案很有帮助:
该问题的一个解决方案/答案如下:
SELECT M.[ID] AS EMLID
,R.[ID] AS RequestID
,T.[ID] AS TransactionID
,R.[DocumentNo]
,T.[CostCenter]
,DENSE_RANK()
OVER (PARTITION BY R.[ID], R.[DocumentNo] ORDER BY T.[CostCenter])
+ DENSE_RANK()
OVER (PARTITION BY R.[ID], R.[DocumentNo] ORDER BY T.[CostCenter] DESC)
- 1 as [NoOfCostCenter]
FROM (tbl_Info M
INNER JOIN tbl_reqtype R ON M.ID = R.EMLID)
INNER JOIN tbl_trantype T ON R.ID = T.RID
ORDER BY [TransactionID]
这将显示结果(源/输入结构稍微简化)。您的问题将受益于不仅显示预期结果,还显示将给出结果的输入(例如,查询表的内容)。您也可以尝试通过删除问题中的连接来简化它(显示一个简单的表,其中只包含与问题相关的列)。@Hilarion,抱歉,我下次发帖时会记住这一点。对不起,天哪!非常感谢你@Hilarion。。。我太高兴了!我真的很感激。谢谢,谢谢!!你帮了我很多忙!