2012-08-14 54 views
-1

我想弄清楚如何编写一个脚本来从一个表中选择某些记录/字段,然后将它加入到另一个表中并包括一个相应的计数列。例如,这是我现在有:选择脚本以包含另一个表的数量?

select ID, Val from OriginalTable where Something = 1 

现在我有有链接到这种原始表,其中一列OriginalIDOriginalTableID匹配记录另一个表。一个示例将是:

select * from OtherTable where OriginalID = 3 

...其中3 = OriginalTableID

我想要做的是添加一列到第一个语句,显示另一个表的计数,如第二个查询中所示。例如,这可能是一个结果集:

ID Val Count 
1  abc 15 
2  def 23 
3  ghi 42 
4  jkl 19 

如何编写此查询以包含此计数?

回答

2

有很多方法可以做到这一点,但你既可以使用一个Group By

select ID, Val, [Count] = count(1) 
from OriginalTable be 
left join OtherTable ot on be.OriginalID = ot.OriginalID 
where Something = 1 
group by ID,Val 

或者你可以使用OVERPartition By

select ID, Val, [Count] = count(1) OVER(PARTITION BY ID,Val) 
from OriginalTable be 
left join OtherTable ot on be.OriginalID = ot.OriginalID 
where Something = 1 

个人而言,我喜欢OVER方法。有关于MSDN here的信息。

+0

在你的答案是什么在'计数1(1)'代表什么? 我试图使用你的例子,因为我认为它是我需要的,但我现在用“OVER”方法返回每一行的许多结果(重复行) 但在我的查询而不是1我有我希望它的列数 – ScottC 2017-10-20 12:48:59

+1

Count(1)或Count(*)可以互换,但与Count(col)不同,它不包含列中的空值。请参阅https://stackoverflow.com/questions/1221559/count-vs-count1。有可能曾经有一段时间,他们是不同的(早期的oracle或sql服务器) – 2017-10-24 09:25:15

+0

啊,这很酷,谢谢! – ScottC 2017-10-24 12:47:50

1
;WITH ot(ID, c) AS 
(
    SELECT OriginalID, COUNT(*) 
    FROM dbo.OtherTable 
    GROUP BY OriginalID 
) 
SELECT t.ID, t.Val, [Count] = COALESCE(ot.c, 0) 
    FROM dbo.OriginalTable AS t 
    LEFT OUTER JOIN ot 
    ON t.ID = ot.ID 
    WHERE t.Something = 1; 
1
SELECT be.ID, be.Val, Count(*) AS [Count] 
FROM OriginalTable be 
LEFT OUTER JOIN OtherTable ot ON be.ID = ot.OriginalID 
WHERE be.Something = 1 
GROUP BY be.ID, be.Val 
+0

尴尬怎么'实际上完全匹配我想要将它转换为首位:D – 2012-08-14 17:49:18

+1

那么你是一个建议'在你自己的查询...' – 2012-08-14 17:50:42

+1

啊,哎呀,我忘了删除实际上,我试图重新编写它,排除业务特定的东西,无论如何,这对我有用,现在哪个答案接受? – 2012-08-14 19:23:14

2

子查询应该处理给你:

SELECT 
    ID, Val, Cnt 
FROM OriginalTable 
JOIN (
    SELECT 
    OriginalID, COUNT(*) AS Cnt 
    FROM OtherTable 
    GROUP BY OriginalID 
) AS Sub ON ID=OriginalID 
+0

这最终成为最适合我的例子,谢谢。 使用SQL Report Builder似乎不喜欢上面的“Over Partitioned By”方法 – ScottC 2017-10-24 13:10:18

相关问题