Sql 用于多个独立输出的多个SELECT语句

Sql 用于多个独立输出的多个SELECT语句,sql,sql-server,visual-studio-2010,stored-procedures,sql-function,Sql,Sql Server,Visual Studio 2010,Stored Procedures,Sql Function,我在SQL Server中有一个数据库,列出了海事事件,其中包含每个事件的日期。 为了便于图表演示,我现在想编写一个SQL语句(用于Visual Studio),它给出每年的事件总数 例如: 2009-2010年(年份-X轴) 45755432(年份-Y轴) X轴的SELECT语句,我可以这样写 SELECT year1, year2 FROM (SELECT 2009 AS year1) AS a, ( SELECT 2010 AS year2) AS b 但是第二个呢? 当我写这样的东西时

我在SQL Server中有一个数据库,列出了海事事件,其中包含每个事件的日期。 为了便于图表演示,我现在想编写一个SQL语句(用于Visual Studio),它给出每年的事件总数

例如:

2009-2010年(年份-X轴)

45755432(年份-Y轴)

X轴的SELECT语句,我可以这样写

SELECT year1, year2 FROM (SELECT 2009 AS year1) AS a, ( SELECT 2010 AS year2) AS b
但是第二个呢? 当我写这样的东西时:

SELECT totalyear1, totalyear2 FROM (SELECT COUNT(Reference) FROM STO.dbo.STOMaritimeIncidents WHERE [Incident date] = 2010 AS totalyear1) AS a, (SELECT COUNT(Reference) FROM STO.dbo.STOMaritimeIncidents WHERE [Incident date] = 2009 AS totalyear2) AS b
我会收到类似“Msg 156,15级,状态1,第1行”的错误 关键字“AS”附近的语法不正确。“


如果有人能给我解释或帮助我,我将不胜感激。非常感谢

需要在列本身上声明
作为totalyear1
作为totalyear2
的别名:

SELECT totalyear1, totalyear2 
FROM (SELECT COUNT(Reference) AS totalyear1 
      FROM STO.dbo.STOMaritimeIncidents 
      WHERE [Incident date] = 2010) AS a, 
     (SELECT COUNT(Reference) AS totalyear2 
      FROM STO.dbo.STOMaritimeIncidents 
      WHERE [Incident date] = 2009) AS b
您只需在一个查询中执行此操作即可改善这一点:

SELECT SUM(CASE WHEN [Incident date] = 2010 THEN 1 ELSE 0) as totalyear1,
       SUM(CASE WHEN [Incident date] = 2009 THEN 1 ELSE 0) as totalyear2
FROM STO.dbo.STOMaritimeIncidents

如果您不介意(或更喜欢)旋转数据,您可以使用@Umair的建议,并将COUNT与GROUPBY子句一起使用。

p.s您可以在一个查询中完成所有操作!比如

SELECT [Incident date], Total = COUNT(Reference) 
FROM STO.dbo.STOMaritimeIncidents
GROUP BY [Incident date]
WHERE [Incident date] IN (2009, 2010)
至于您的实际错误,是因为行
…其中[Incident date]=2009作为totalyear2
等。它需要采用以下格式(列上需要别名)


这很好地工作,除了数据是透视的-与原始查询的结果不同。另外,
Total=COUNT(Reference)
可能应该是
COUNT(Reference)AS Total
Ah yes。抢手货我要提到的是。@PinnyM
Total=COUNT(Reference)
COUNT(Reference)AS Total
是一回事,不是吗?但是,
作为
更清楚!我不记得看到过SQL Server的语法-您有这方面的源代码吗?它通常用于分配变量……事实上,我是这样做的:
SELECT totalyear2 = COUNT(Reference) FROM STO.dbo.STOMaritimeIncidents WHERE [Incident date] = 2010