我有两个表 - 一个是状态,另一个是Job标题。SQL Server查询生成动态列
我想编写一个查询将输出我是这样的: -
Job titles State name1 State name2
Job title1 200 300
Job title2 500 600
我怎么能写在SQL Server此查询。
我有两个表 - 一个是状态,另一个是Job标题。SQL Server查询生成动态列
我想编写一个查询将输出我是这样的: -
Job titles State name1 State name2
Job title1 200 300
Job title2 500 600
我怎么能写在SQL Server此查询。
如果您使用SQLSERVER 2005或更大,你可以尝试使用数据透视表
我不知道您的架构看起来像,但它听起来像是你想改变它有三个表:JOBTITLE,国家,和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例如here。
正如zimdanen所说,在不知道确切的表结构的情况下编写查询将会很困难。
我假设结构JOBTITLE表有JobTitleId和JOBTITLE字段和* state_salary *表已经JobTitleId,国家和工资的领域。
使用数据透视表
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
虽然不是不正确,你可以充实你的答案? – Ben