私には2つのテーブルがあります。1つは州で、もう1つは役職用です。
このようなものを出力するクエリを書きたい:-
Job titles State name1 State name2
Job title1 200 300
Job title2 500 600
このクエリをSQLServerで作成するにはどうすればよいですか。
私には2つのテーブルがあります。1つは州で、もう1つは役職用です。
このようなものを出力するクエリを書きたい:-
Job titles State name1 State name2
Job title1 200 300
Job title2 500 600
このクエリをSQLServerで作成するにはどうすればよいですか。
スキーマがどのようなものかわかりませんが、JobTitle、State、JobTitle_State_Salary の 3 つのテーブルを持つように変更したいようです。そうすれば、給与に結び付けるために役職や州を繰り返すことはありません。
ただし、書かれているように問題に対処する (そして、給与は州と共に移動すると仮定する) と、次のような方法で問題が解決するはずです。
WITH [CTE] AS
(
SELECT [Title], [State], [Salary]
FROM [JobTitle]
INNER JOIN [StateSalary]
ON [JobTitle].[ID] = [StateSalary].[JobTitleID]
)
SELECT
[Title], [State name1], [State name2]
FROM
[CTE]
PIVOT
(
MAX([Salary])
FOR [State] IN ([State name1], [State name2])
) AS [P]
SQLFiddle の例はこちら。
zimdanen が言ったように、正確なテーブル構造を知らずにクエリを書くのは難しいでしょう。
JobTitleテーブルにはJobTitleIdフィールドとJobTitleフィールドがあり、 *state_salary* テーブルにはJobTitleId、State、およびSalaryフィールドがフィールドとして含まれていると仮定しました。
ピボットテーブルの使用
SELECT * FROM (
SELECT A.JOB_TITLE,B.STATE,B.SALARY FROM dbo.JOB_TITLE A INNER JOIN dbo.STATE_SALARY B
ON A.JOB_TITLE_ID = B.JOB_TITLE_ID)AS SOURCE_TABLE PIVOT
(SUM(SALARY) FOR STATE IN (STATE1,STATE2)) AS PivotTable
ピボットテーブルなし
SELECT A.JOB_TITLE,SUM(CASE WHEN B.STATE = 'State1' THEN B.SALARY ELSE 0 END) STATE1, SUM(CASE WHEN B.STATE = 'State2' THEN B.SALARY ELSE 0 END) STATE2
FROM dbo.JOB_TITLE A INNER JOIN dbo.STATE_SALARY B
ON A.JOB_TITLE_ID = B.JOB_TITLE_ID
GROUP BY A.JOB_TITLE
sqlserver 2005 以降を使用している場合は、ピボット テーブルを使用してみてください。