如何根据选择列SQL Server

时间:2016-02-25 08:16:55

标签: sql-server count row distinct

我在SQL Server中有一个包含7列的表:

----------------------------------------------------------------------------------------
id | Source_Node | Source_Node_Type | Target_Node | Target_Node_Type | Year | Edge_Type
----------------------------------------------------------------------------------------

1    10965          2                  23036        3                  2005   2
2    10965          2                  23036        3                  2005   2
3    2947           2                  23036        3                  2005   2
4    37529          4                  23036        3                  2005   4
...  
...

然而,我必须仅基于两列来计算DISTINCT行,例如Source_NodeTarget_Node,例如id 1和2的行具有Source_NodeTarget_Node的相同值,因此这些行应仅获得COUNT一次。我尝试过查询:

SELECT COUNT(*) FROM GraphEdges
WHERE Source_Node IN (...Node_List...) 
AND Target_Node IN (...Node_List)  

在尝试此查询时,它给出的COUNT为58:

SELECT DISTINCT Source_Node, Target_Node FROM GraphEdges
WHERE Source_Node IN (...Node_List...) 
AND Target_Node IN (...Node_List...)  

它给出53行,我需要的数字,但它给出了整行,而我需要COUNT数字,即53 如何修改查询?
谢谢!

2 个答案:

答案 0 :(得分:0)

尝试按源节点和目标节点进行分组。然后计算分组的行。

select count(*) from
(select Source_Node_Type, Target_Node_Type from GraphEdges group by Source_Node_Type, Target_Node_Type) a

答案 1 :(得分:0)

您可以使用另一个选项包装它:

SELECT COUNT(*) FROM (
    SELECT DISTINCT Source_Node, Target_Node FROM GraphEdges
    WHERE Source_Node IN (...Node_List...) 
           AND Target_Node IN (...Node_List...))

或者没有子查询的解决方案:

SELECT count(distinct concat(Source_Node,Target_Node))
FROM GraphEdges
WHERE Source_Node IN (...Node_List...) 
      AND Target_Node IN (...Node_List...))