-1

我有两张表 - 一张是州,另一张是职称。

我想写一个查询,它会输出如下内容:-

Job titles  State name1  State name2
Job title1      200         300
Job title2      500         600

如何在 SQL Server 中编写此查询。

4

3 回答 3

3

我不知道您的架构是什么样的,但听起来您想将其更改为具有三个表: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 示例在这里

于 2012-06-13T13:09:22.750 回答
1

正如 zimdanen 所说,如果不知道确切的表结构,就很难编写查询。

我假设JobTitle表具有JobTitleIdJobTitle字段,并且 *state_salary* 表具有JobTitleIdStateSalary作为字段。

使用数据透视表

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
于 2012-06-14T03:19:07.453 回答
0

如果您使用的是 sqlserver 2005 或更高版本,您可以尝试使用数据透视表

于 2012-06-13T11:59:02.067 回答