Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 选择脚本以包含另一个表的计数?_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql server 选择脚本以包含另一个表的计数?

Sql server 选择脚本以包含另一个表的计数?,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我试图找出如何编写一个脚本,从一个表中选择某些记录/字段,然后将其连接到另一个表中,并包含一个对应计数的列。例如,这就是我现在拥有的: select ID, Val from OriginalTable where Something = 1 现在我有了另一个表,其中有链接到此原始表的记录,其中a列OriginalID与OriginalTable的ID匹配。一个例子是: select * from OtherTable where OriginalID = 3 …其中3=原始表的ID 我想做

我试图找出如何编写一个脚本,从一个表中选择某些记录/字段,然后将其连接到另一个表中,并包含一个对应计数的列。例如,这就是我现在拥有的:

select ID, Val from OriginalTable where Something = 1
现在我有了另一个表,其中有链接到此原始表的记录,其中a列
OriginalID
OriginalTable
ID
匹配。一个例子是:

select * from OtherTable where OriginalID = 3
…其中3=原始表的
ID

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

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

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

有很多方法可以做到这一点,但您可以使用
分组方式

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
或者您可以使用
覆盖
分区

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

我个人喜欢
而不是
方法。MSDN上有一些信息。

子查询应该为您处理这些信息:

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

尴尬的是,
be
实际上完全符合我最初打算将其转换为的内容:哎呀,哎呀,我忘了删除它。实际上,我试图重新编写它,但不包括业务特定的内容,不管怎样,这对我有效,现在接受哪个答案?在你的回答中,
中的1算(1)
代表什么?我试图使用您的示例,因为我认为这是我所需要的,但是我现在使用
OVER
方法为每一行返回了许多结果(重复行),但是在我的查询中,不是1,而是我希望它的列countcountcount(1)或Count(*)是可互换的,但不同于Count(col),Count(col)在列中不包含null。看见也许曾经有一段时间,它们是不同的(早期的oracle或sql server),这最终成为最适合我的例子,谢谢。使用SQL报表生成器似乎不喜欢上面的
过度分区方法
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
SELECT 
  ID, Val, Cnt
FROM OriginalTable
JOIN (
  SELECT 
    OriginalID, COUNT(*) AS Cnt
  FROM OtherTable
  GROUP BY OriginalID
  ) AS Sub ON ID=OriginalID