首页 > 解决方案 > 连接行值以形成一行,内联,不使用第二个表,这可能吗?

问题描述

希望比我更了解 SQL 的人可以在这里提供帮助:)。我有一个结果集,它分布在两行或多行上,但我需要它都在一行上。我的问题是,如果不使用临时表(因为这是在 PHP 中动态内联完成的),在选择 AS 时是否可以使用 SQL 将值放在同一行上?

我已经尝试了几种不同的技术,最终达到了现在的状态。以前我尝试过不同的分组方法,但没有任何方法,导致重复数据或错误值。另一种尝试是将值相加到新列中,但这再次导致值不正确。我得到的最接近的是我现在的位置,但是正如您从数据中看到的那样,行是重复的,每个术语应该只有一行,相应的数据在每一列中水平跨越。

这是SQL

SELECT
    LineDescription,
    Term,
    SUM(CASE When LineDescription='StandingCharge' Then UnitCharge Else 0 End ) as StandingUnitCharge,
    SUM(CASE When LineDescription='UNIT CHARGE' Then UnitCharge Else 0 End ) as UnitCharge,
    SUM(CASE When LineDescription='DAY UNIT CHARGE' Then UnitCharge Else 0 End ) as DayUnitCharge,
    SUM(CASE When LineDescription='NIGHT UNIT CHARGE' Then UnitCharge Else 0 End ) as NightUnitCharge,
    SUM(CASE When LineDescription='WEEKDAY DAY UNIT CHARGE' Then UnitCharge Else 0 End ) as WeekdayUnitCharge,
    SUM(CASE When LineDescription='EVENING & WEEKEND UNIT CHARGE' Then UnitCharge Else 0 End ) as WeekendUnitCharge,
    SUM(CASE When LineDescription='OFF PEAK UNIT CHARGE' Then UnitCharge Else 0 End ) as OffpeakUnitCharge,
    SUM(CASE When LineDescription='WINTER WEEKDAY PEAK' Then UnitCharge Else 0 End ) as WinterPeakUnitCharge,
    SUM(CASE When LineDescription='WINTER OFF PEAK & SUMMER DAY' Then UnitCharge Else 0 End ) as WinterOffPeakUnitCharge
FROM
    pricebook_bg_elec
WHERE  
ProfileClass='3' AND pes='23' AND SalesType='Acquisition' and StandingCharge='SC' and UnitCharge>0 and 
('2920' between aq_min AND aq_max) AND MeterType='Single Rate' AND 
('2020-07-30' between WindowOpen AND WindowClose) and PaymentMethod='DD'
GROUP BY
    LineDescription,Term

以下是到目前为止的代码结果:

LineDescription Term    StandingUnitCharge  UnitCharge  DayUnitCharge   NightUnitCharge WeekdayUnitCharge   WeekendUnitCharge   OffpeakUnitCharge   WinterPeakUnitCharge    WinterOffPeakUnitCharge
StandingCharge  12  30.24   0   0   0   0   0   0   0   0
UNIT CHARGE 12  0   16.59   0   0   0   0   0   0   0
StandingCharge  24  31.18   0   0   0   0   0   0   0   0
UNIT CHARGE 24  0   16.63   0   0   0   0   0   0   0
StandingCharge  36  43.01   0   0   0   0   0   0   0   0
UNIT CHARGE 36  0   16.58   0   0   0   0   0   0   0
StandingCharge  48  55.02   0   0   0   0   0   0   0   0
UNIT CHARGE 48  0   16.01   0   0   0   0   0   0   0

但是,如上所述,所需的结果是,对于每个术语 (12,24,36,48),它将显示一行,其中的值是水平方向而不是垂直方向。

如果这可以在不使用临时表的情况下完成,这将是更可取的,因为这些数据正在通过 PHP 即时被拉入数据表场景,这就是为什么它只需要返回单行值而不是比使用 PHP 之前的任何复杂情况都要好。这就是为什么如果可以的话,我会让 SQL 完成所有工作。

任何和所有的帮助都非常感谢,我已经在这几天了!

标签: phpsqlsql-serversqlsrv

解决方案


GROUP BY通过删除更改您的LineDescription

GROUP BY Term

LineDescriptionSELECT.

GROUP BY指定结果集中有哪些行。如果您希望每个 的值一行Term,那么这应该是 中的唯一列GROUP BY

您不能选择LineDescription每个 是否有一行Term,因为有多个值。无论如何,该信息都在列中。


推荐阅读