我有两张表 - 一张是州,另一张是职称。
我想写一个查询,它会输出如下内容:-
Job titles State name1 State name2
Job title1 200 300
Job title2 500 600
如何在 SQL Server 中编写此查询。
我有两张表 - 一张是州,另一张是职称。
我想写一个查询,它会输出如下内容:-
Job titles State name1 State name2
Job title1 200 300
Job title2 500 600
如何在 SQL Server 中编写此查询。
我不知道您的架构是什么样的,但听起来您想将其更改为具有三个表:JobTitle、State 和 JobTitle_State_Salary。这样,您就不会为了与薪水挂钩而重复职位或州。
但是,按照书面形式解决问题(并假设薪水随州而变化),这样的事情应该可以解决问题:
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 或更高版本,您可以尝试使用数据透视表