需要SQL SERVER 2008 DB的SQL查询帮助

时间:2013-09-12 03:19:59

标签: c# .net sql sql-server sql-server-2008

请参考图片查看我们的表结构和预期输出。我需要表1中的所有行以及一个新列,该列给出了第二个表中每个批次ID的计划编号计数。

Table Structure and Excepted output

2 个答案:

答案 0 :(得分:0)

你需要加入表格(左连接更好,因为它计算从没有计划的1开始的错过行),然后是一个组

SELECT 
   T1.[Batch Id], 
   T1.[Batch Name], 
   T1.[Date], 
   T1.[Status], 
   COUNT(T2.PlanNUmber) AS PLANCOUNT
FROM
  Table1 T1
  LEFT JOIN Table2 T2 ON T1.[Batch Id] = T2.[Batch Id]
GROUP BY
   T1.[Batch Id], 
   T1.[Batch Name], 
   T1.[Date], 
   T1.[Status] 

正如我所说,如果你进行LEFT JOIN,那么它将选择没有计划的批次,但是如果你确定T1中的批次中没有T2中没有行的行,那么你可以使用INNER JOIN。

我个人更喜欢第一个,因为它很好地涵盖了两个案例。

答案 1 :(得分:0)

看起来很简单GROUP BY

SELECT T1.[Batch Id], BatchName, Date, Status, COUNT(PlanNumber) AS PLANCOUNT
FROM Table1 T1
JOIN Table2 T2 ON T1.[Batch Id] = T2.[Batch Id]
GROUP BY T1.[Batch Id], BatchName, Date, Status