Sql server SQL Count Distinct带有多个条件,以返回所有列、所有记录

Sql 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

您好,我正在尝试计算给定条件的不同值的数量,但是,我需要查询结果包括所有列和记录。基本上,distinct count结果将作为一个新列添加到原始表中,并且只对每一行重复

这就是我目前所拥有的,我无法进入下一步。我有三张桌子连在一起。考虑到R.ID(来自tbl_reqtype)和R.DocumentNo(来自tbl_reqtype)是相同的,我想计算tbl_trantype中唯一的T.CostCenter

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。。。我太高兴了!我真的很感激。谢谢,谢谢!!你帮了我很多忙!