如何根据选择性列 SQL 服务器计算 DISTINCT

How to COUNT DISTINCT on basis of Selective columns SQL Server

我在 SQL 服务器中有一个 table,其中包含 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
...  
...

而我必须仅根据两列(即 Source_NodeTarget_Node 计算不同的行,例如id 1 和 2 的行在 Source_NodeTarget_Node 中具有相同的值,因此这些应该只获取一次。我试过查询:

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。
如何修改查询?
谢谢!

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

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

你可以像这样用另一个 select 包裹它:

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...))