连接行值以形成一行,内联,而不使用第二个 table,这可能吗?

Concatenating row values to form one row, inline, without use of second table, is it possible?

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

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

这是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),它将显示一行,值是水平的而不是垂直的。

如果这可以在不使用临时 table 的情况下完成,这将是更可取的,因为这些数据正在通过 PHP 被拉入数据 table 场景在运行中,这就是为什么它只需要 return 单行值而不是在到达 PHP 之前出现任何复杂情况的原因。这就是为什么我要 SQL 尽可能完成所有工作。

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

通过删除 LineDescription 更改您的 GROUP BY:

GROUP BY Term

并从 SELECT 中删除 LineDescription

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

中唯一的一列

如果每个 Term 一行,则不能 select LineDescription,因为有多个值。无论如何,该信息都在列中。