【问题标题】:SQL Group By expression to return same number of rowsSQL Group By 表达式返回相同的行数
【发布时间】:2018-12-21 07:16:29
【问题描述】:

我在联合查询中返回 group by 表达式中的相同行时遇到问题。我目前拥有的 SQL 返回以下结果 Current results 我想在 2 个表中显示相同数量的行,所以即使数量为零,我也需要返回一行。 Proposed results.

我的 SQL 目前看起来像这样

    SELECT
    'A' AS Code,
    'Internal Equipment' AS Description,
    'Project A' AS Project,
    Revision,
    'ME' AS Customer,
    Discipline,
    SUM(Amount)
FROM
    Table B
WHERE
    (
        Project = @Project
    )
AND (
        Revision = @Revision
    )
AND Amount > 0
AND RoleCode NOT LIKE 'AAA%'
GROUP BY
    Project,
    Revision,
    Customer,
    Discipline
UNION ALL
SELECT
    'B' AS Code,
    'External Equipment' AS Description,
    'Project A' AS Project,
    Revision,
    'ME' AS Customer,
    Discipline,
    SUM(Amount)
FROM
    Table B
WHERE
    (
        Project = @Project
    )
AND (
        Revision = @Revision
    )
AND Amount > 0
AND RoleCode LIKE 'AAA%'
GROUP BY
    Project,
    Revision,
    Customer,
    Discipline
UNION ALL
SELECT
    'C' AS Code,
    'Labour' AS Description,
    'Project A' AS Project,
    Revision,
    'ME' AS Customer,
    Discipline,
    SUM(Amount)
FROM
    Table A
WHERE
    (
        Project = @Project
    )
AND (
        Revision = @Revision
    )
GROUP BY
    Project,
    Revision,
    Customer,
    Discipline
UNION ALL
SELECT
    'D' AS Code,
    'Travel & Accomodation' AS Description,
    'Project A' AS Project,
    Revision,
    'ME' AS Customer,
    Discipline,
    SUM(Amount).
FROM
    Table B
WHERE
    (
        Project = @Project
    )
AND (
        Revision = @Revision
    )
AND Amount > 0
AND RoleCode IN('BBB', 'CCC', 'DDD')
GROUP BY
    Project,
    Revision,
    Customer,
    Discipline

有人可以帮忙吗。

谢谢。

【问题讨论】:

  • 谢谢LoztInSpace,这已经解决了问题。顺便说一下,这是一个 SQL Server 数据库

标签: sql


【解决方案1】:

根据您使用的数据库,有几种方法。我可能会这样处理它。

with CODES AS
(
SELECT
'A' AS Code, 'Internal Equipment' AS Description
UNION ALL
'B' AS Code, 'External Equipment' AS Description
),
DATA AS
(
...Your SQL HERE (without description)
)
SELECT * from Codes left outer join DATA on (Codes.Code=Data.Code)
ORDER BY CODES.Code

您必须决定如何处理缺失值NULLCOALESCE 可能是这里要用到的函数。

另外,您的问题是 SELECT/UNION 而不是 GROUP BY!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2014-09-06
    • 2023-02-09
    相关资源
    最近更新 更多