Sql server 2008 枢轴和联接的问题

Sql server 2008 枢轴和联接的问题,sql-server-2008,select,pivot,left-join,Sql Server 2008,Select,Pivot,Left Join,我希望你能帮助我 我对更大的SQL查询不是很熟练,因此我无法在大约5到6个小时内解决这个问题:/ 在SQL Server 2008上,我收到以下错误: SELECT kostenstelle_nr, kostenstelle_name, [1] AS Jan, [2] AS Feb, [3] AS Mrz, [4] AS Apr, [5] AS Mai, [6] AS Jun, [7] AS Jul, [8] AS

我希望你能帮助我 我对更大的SQL查询不是很熟练,因此我无法在大约5到6个小时内解决这个问题:/

在SQL Server 2008上,我收到以下错误:

SELECT
    kostenstelle_nr,
    kostenstelle_name,
    [1] AS Jan,
    [2] AS Feb,
    [3] AS Mrz,
    [4] AS Apr,
    [5] AS Mai,
    [6] AS Jun,
    [7] AS Jul,
    [8] AS Aug,
    [9] AS Sep,
    [10] AS Okt,
    [11] AS Nov,
    [12] AS Dez,
    SUM ( j_sumzeit ) AS [2011],
    SUM ( vj_sumzeit ) AS [2010],
    ROUND( 100 -  ( ( vj_sumzeit / j_sumzeit ) *100 ) , 0 ) AS [diff]
FROM
(
    SELECT
        dbo.kostenstelle.kostenstelle_nr,
        dbo.kostenstelle.kostenstelle_name,
        SUM ( j_sumzeitpromo ) AS j_sumzeit,
        SUM ( vj_sumzeitpromo ) AS vj_sumzeit,
        MONTH ( j_datum ) AS TMonth
    FROM
        dbo.kostenstelle

    LEFT JOIN
    (
        SELECT
            dbo.def.def_kstnr AS j_kstnr,
            dbo.def.def_datum AS j_datum,
            SUM ( dbo.def.def_zeit ) AS j_sumzeitpromo,
            COUNT ( dbo.def.def_zeit ) AS j_anzahl
        FROM
            dbo.def
        WHERE
            YEAR ( dbo.def.def_datum ) = 2011
            AND dbo.def.def_auknr > 215
        GROUP BY
            dbo.def.def_kstnr,
            dbo.def.def_datum
    ) jahr
    ON j_kstnr = dbo.kostenstelle.kostenstelle_nr

    LEFT JOIN
    (
        SELECT
            dbo.def.def_kstnr AS vj_kstnr,
            dbo.def.def_datum AS vj_datum,
            SUM ( dbo.def.def_zeit ) AS vj_sumzeitpromo,
            COUNT ( dbo.def.def_zeit ) AS vj_anzahl
        FROM
            dbo.def
        WHERE
            YEAR ( dbo.def.def_datum ) = 2010
            AND dbo.def.def_auknr > 215
        GROUP BY
            dbo.def.def_kstnr,
            dbo.def.def_datum
    ) vorjahr
    ON j_kstnr = dbo.kostenstelle.kostenstelle_nr

    GROUP BY 
        dbo.kostenstelle.kostenstelle_nr,
        dbo.kostenstelle.kostenstelle_name,
        MONTH ( j_datum )
) source
PIVOT
(
    SUM(j_sumzeit)
    FOR TMonth
    IN ( [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12] )
) AS pvtMonth
GROUP BY
    kostenstelle_nr,
    kostenstelle_name
“pvtMonth.1”列为 在选择列表中无效,因为它不包含在 聚合函数或GROUPBY子句

列名“j_sumzeit”无效

列名“j_sumzeit”无效

我的查询:

SELECT
    kostenstelle_nr,
    kostenstelle_name,
    [1] AS Jan,
    [2] AS Feb,
    [3] AS Mrz,
    [4] AS Apr,
    [5] AS Mai,
    [6] AS Jun,
    [7] AS Jul,
    [8] AS Aug,
    [9] AS Sep,
    [10] AS Okt,
    [11] AS Nov,
    [12] AS Dez,
    SUM ( j_sumzeit ) AS [2011],
    SUM ( vj_sumzeit ) AS [2010],
    ROUND( 100 -  ( ( vj_sumzeit / j_sumzeit ) *100 ) , 0 ) AS [diff]
FROM
(
    SELECT
        dbo.kostenstelle.kostenstelle_nr,
        dbo.kostenstelle.kostenstelle_name,
        SUM ( j_sumzeitpromo ) AS j_sumzeit,
        SUM ( vj_sumzeitpromo ) AS vj_sumzeit,
        MONTH ( j_datum ) AS TMonth
    FROM
        dbo.kostenstelle

    LEFT JOIN
    (
        SELECT
            dbo.def.def_kstnr AS j_kstnr,
            dbo.def.def_datum AS j_datum,
            SUM ( dbo.def.def_zeit ) AS j_sumzeitpromo,
            COUNT ( dbo.def.def_zeit ) AS j_anzahl
        FROM
            dbo.def
        WHERE
            YEAR ( dbo.def.def_datum ) = 2011
            AND dbo.def.def_auknr > 215
        GROUP BY
            dbo.def.def_kstnr,
            dbo.def.def_datum
    ) jahr
    ON j_kstnr = dbo.kostenstelle.kostenstelle_nr

    LEFT JOIN
    (
        SELECT
            dbo.def.def_kstnr AS vj_kstnr,
            dbo.def.def_datum AS vj_datum,
            SUM ( dbo.def.def_zeit ) AS vj_sumzeitpromo,
            COUNT ( dbo.def.def_zeit ) AS vj_anzahl
        FROM
            dbo.def
        WHERE
            YEAR ( dbo.def.def_datum ) = 2010
            AND dbo.def.def_auknr > 215
        GROUP BY
            dbo.def.def_kstnr,
            dbo.def.def_datum
    ) vorjahr
    ON j_kstnr = dbo.kostenstelle.kostenstelle_nr

    GROUP BY 
        dbo.kostenstelle.kostenstelle_nr,
        dbo.kostenstelle.kostenstelle_name,
        MONTH ( j_datum )
) source
PIVOT
(
    SUM(j_sumzeit)
    FOR TMonth
    IN ( [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12] )
) AS pvtMonth
GROUP BY
    kostenstelle_nr,
    kostenstelle_name
包含一些示例数据的表格

桌子的结构很糟糕,但我不能改变它们,因为它们来自外部公司

|-----------------------------------------------|
| def_kstnr | def_zeit | def_datum  | def_auknr |
|-----------------------------------------------|
| 100       | 3.2      | 2011-11-02 | 245       |
| 110       | 2.8      | 2011-02-03 | 265       |
| 120       | 5.4      | 2011-11-04 | 250       |
| 130       | 2.4      | 2011-08-05 | 280       |
| 140       | 4.9      | 2011-09-06 | 300       |
| 150       | 1.5      | 2011-10-07 | 320       |
| 160       | 2.6      | 2011-12-08 | 450       |
|-----------------------------------------------|

|-------------------------------------------------------|
| kostenstelle_id | kostenstelle_nr | kostenstelle_name |
|-------------------------------------------------------|
| 1               | 245             | KstTst1           |
| 2               | 265             | KstTst1           |
| 3               | 250             | KstTst1           |
| 4               | 280             | KstTst1           |
| 5               | 300             | KstTst1           |
| 6               | 320             | KstTst1           |
| 7               | 450             | KstTst1           |
|-------------------------------------------------------|
结果应如下所示(数字可能与上述示例数据不同)


多谢各位。如果您需要更多信息,我很乐意为您提供:)

如果不查看初始表结构,很难说。
尝试在SELECT中插入“j_sumzeit”列(就在第一个FROM之后)。

如果不看到初始表结构,很难说清楚。
尝试在您的选择中插入“j_sumzeit”列(就在第一个FROM之后)。

您的选择中有很多关于
GROUP
ing和聚合的问题。我很惊讶你没有得到这些错误代码,但我想一旦其他问题得到解决,你会得到的。我希望一旦我得到错误,我能找到并解决它们-谢谢!您选择的
ing和聚合有很多问题。我很惊讶你没有得到这些错误代码,但我想一旦其他问题得到解决,你会得到的。我希望一旦我得到错误,我能找到并解决它们-谢谢!嗨,帕维尔·内费奥多夫!我还收到错误“无效的列名'j_sumzeit'。”。我用表格结构和更多信息编辑了这篇文章。谢谢你的帮助!理想结果表不包含来自dbo.kostenstelle的信息。我们为什么要买它?嗨,帕维尔·内费奥多夫!我还收到错误“无效的列名'j_sumzeit'。”。我用表格结构和更多信息编辑了这篇文章。谢谢你的帮助!理想结果表不包含来自dbo.kostenstelle的信息。我们为什么要拥有它?