【问题标题】:Multiple SELECT statements for multiple independent outputs多个独立输出的多个 SELECT 语句
【发布时间】:2013-01-16 17:04:02
【问题描述】:

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

例子:

2009 年 2010 年(年 - X 轴)

4575 5432(年 - 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, Level 15, State 1, Line 1 关键字 'AS' 附近的语法不正确。"

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

【问题讨论】:

    标签: sql sql-server visual-studio-2010 stored-procedures sql-function


    【解决方案1】:

    AS totalyear1AS 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 与 GROUP BY 子句一起使用。

    【讨论】:

      【解决方案2】:

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

      SELECT [Incident date], Total = COUNT(Reference) 
      FROM STO.dbo.STOMaritimeIncidents
      GROUP BY [Incident date]
      WHERE [Incident date] IN (2009, 2010)
      

      至于您的实际错误,是因为...WHERE [Incident date] = 2009 AS totalyear2 等行。它需要采用以下格式(别名需要在列上)

      SELECT totalyear2 = COUNT(Reference) FROM STO.dbo.STOMaritimeIncidents WHERE [Incident date] = 2010
      

      【讨论】:

      • 这很好用,除了数据是旋转的 - 与原始查询的结果不同。 Total = COUNT(Reference) 也应该是 COUNT(Reference) AS Total
      • 啊,是的。接得好。我会提到这一点。
      • @PinnyM Total = COUNT(Reference)COUNT(Reference) AS Total 不是同一个东西吗?但是AS! 更清楚
      • 我不记得看到 SQL Server 的语法 - 你有这个的来源吗?一般用于变量赋值...
      猜你喜欢
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2016-04-26
      相关资源
      最近更新 更多