php - 连接行值以形成一行,内联,不使用第二个表,这可能吗?
问题描述
希望比我更了解 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 完成所有工作。
任何和所有的帮助都非常感谢,我已经在这几天了!
解决方案
GROUP BY
通过删除更改您的LineDescription
:
GROUP BY Term
并LineDescription
从SELECT
.
GROUP BY
指定结果集中有哪些行。如果您希望每个 的值一行Term
,那么这应该是 中的唯一列GROUP BY
。
您不能选择LineDescription
每个 是否有一行Term
,因为有多个值。无论如何,该信息都在列中。
推荐阅读
- r - 在 R 中矢量化 if-else 塔的正确方法
- python - 从 pandas 数据框创建 plotly scattermapbox
- php - 在 Laravel 5.8 中使用 $_SESSION 有什么不好的地方吗?如果有的话,为什么?
- c - 数组函数参数声明中的静态关键字
- azure - 如何将 Azure Web 应用程序/Web 作业自定义日志引入 Azure Monitor 日志分析工作区
- scala - 无法在 Spark scala 中执行嵌套的 Unix 命令
- gremlin - Gremlin 中的 project() 步骤缺少属性时的默认值?
- angular - 如何将 Subjects 和 Observables 与 Angular rxjs 结合起来
- tensorflow - 构建 TensorFlow:从 Bazel 根外部导入 MPI 标头
- python-3.x - 使用 python opencv 的 OMR 气泡表扫描仪