0

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

しかし、2番目のものはどうですか?私が次のようなものを書くとき:

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

「メッセージ156、レベル15、状態1、行1キーワード「AS」の近くの構文が正しくありません。」などのエラーが発生します。

誰かが私に説明をしたり、それを手伝ってくれたら本当にありがたいです。どうもありがとう!

4

2 に答える 2

1

AS totalyear1およびエイリアスのAS 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

これを1つのクエリで実行するだけで、これを改善できます。

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の提案を使用し、GROUPBY句でCOUNTを使用できます。

于 2013-01-16T17:10:58.793 に答える
0

PSあなたは1つのクエリですべてを行うことができます!そのような

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
于 2013-01-16T17:11:09.733 に答える