Sql 计算分组语法可能性
Sql Calculated Group By syntax possibility
所以,我有这个 shell 命令可以从 select 创建一个 csv,但这并不重要。我遇到的问题是我正在 selecting 的字段之一是一个用作日期字段 yyyymmdd 的整数字段。所以我想做的是 select 字段 / 100 来获取 yyyymm 并按它和其余字段分组并对最后一个字段求和。
SELECT trim(a.F1)||chr(44)||trim(b.F2)||chr(44)||trim(F3)||chr(44)
||trim(F4)||chr(44)|||CAST(plandate/100 AS INT)||chr(44)
||trim(F5)||chr(44)||trim(F6)||chr(44)||trim(true_dem)
as "F1, F2, F3, F4, YYYYMM, F5, F6, MONTHLY_DEMAND"
from T1 a
join T2 b on a.ASDF = b.ASDF
WHERE PLANDATE > 20180400
因此,正如您现在看到的,我正在抓取特定日期之后的所有日期,但我没有按逻辑分组,这是因为我可以按所有"F" 个字段,但我不知道根据什么对提交日期进行分组,因为它是计算得出的 CAST( plandate/100 AS INT)
我试过这样做
SELECT trim(a.f1)||chr(44)||trim(b.f2)||chr(44)||trim(f3)||chr(44)
||trim(f4)||chr(44)||CAST( plandate/100 AS INT)||chr(44)
||trim(f5)||chr(44)||trim(f6)||chr(44)||sum(true_dem)
as "f1, f2, f3, f4, YYYYMM, f5, f6, MONTHLY_DEMAND"
from t1 a
join t2 b on a.f1 = b.f1
WHERE PLANDATE > 20180400
group by a.f1, f2, f3, f4, f5, f6, (CAST( plandate/100 AS INT))
但这显然不正确,因为我得到 SELECT 列表中的 [SQL0122] 列 PLANDATE 或表达式无效。错误。几乎只是说这不好。如果可能的话,我真的很想保留这个别名,这样我就可以将它导出到带有列标题的 csv
忽略 fx 和 tx 的东西我只是想删除对公司数据库的任何提示。如果这很重要,我通过 qsh
在 I-series DB2 上 运行
这不会也输出您想要的列 headers:
SELECT
a.f1, b.f2, f3, f4, CAST( plandate/100 AS INT) as YYYYMM,
f5, f6, sum(true_dem) as MONTHLY_DEMAND
from t1 a join t2 b on a.f1 = b.f1
WHERE PLANDATE > 20180400
group by a.f1, f2, f3, f4, f5, f6, (CAST( plandate/100 AS INT))
如果您认为需要按照自己的方式进行,只需先使用子选择进行聚合即可:
SELECT
trim(f1)||chr(44)||trim(f2)||chr(44)||trim(f3)||chr(44)||trim(f4)||chr(44)
||CAST( plandate/100 AS INT)||chr(44)||trim(f5)||chr(44)||trim(f6)||chr(44)
||sum(true_dem)
as "f1, f2, f3, f4, YYYYMM, f5, f6, MONTHLY_DEMAND"
FROM (
SELECT
a.f1, b.f2, f3, f4, CAST( plandate/100 AS INT) as YYYYMM,
f5, f6, sum(true_dem) as MONTHLY_DEMAND
from t1 a join t2 b on a.f1 = b.f1
WHERE PLANDATE > 20180400
group by a.f1, f2, f3, f4, f5, f6, (CAST( plandate/100 AS INT))
) t
所以,我有这个 shell 命令可以从 select 创建一个 csv,但这并不重要。我遇到的问题是我正在 selecting 的字段之一是一个用作日期字段 yyyymmdd 的整数字段。所以我想做的是 select 字段 / 100 来获取 yyyymm 并按它和其余字段分组并对最后一个字段求和。
SELECT trim(a.F1)||chr(44)||trim(b.F2)||chr(44)||trim(F3)||chr(44)
||trim(F4)||chr(44)|||CAST(plandate/100 AS INT)||chr(44)
||trim(F5)||chr(44)||trim(F6)||chr(44)||trim(true_dem)
as "F1, F2, F3, F4, YYYYMM, F5, F6, MONTHLY_DEMAND"
from T1 a
join T2 b on a.ASDF = b.ASDF
WHERE PLANDATE > 20180400
因此,正如您现在看到的,我正在抓取特定日期之后的所有日期,但我没有按逻辑分组,这是因为我可以按所有"F" 个字段,但我不知道根据什么对提交日期进行分组,因为它是计算得出的 CAST( plandate/100 AS INT)
我试过这样做
SELECT trim(a.f1)||chr(44)||trim(b.f2)||chr(44)||trim(f3)||chr(44)
||trim(f4)||chr(44)||CAST( plandate/100 AS INT)||chr(44)
||trim(f5)||chr(44)||trim(f6)||chr(44)||sum(true_dem)
as "f1, f2, f3, f4, YYYYMM, f5, f6, MONTHLY_DEMAND"
from t1 a
join t2 b on a.f1 = b.f1
WHERE PLANDATE > 20180400
group by a.f1, f2, f3, f4, f5, f6, (CAST( plandate/100 AS INT))
但这显然不正确,因为我得到 SELECT 列表中的 [SQL0122] 列 PLANDATE 或表达式无效。错误。几乎只是说这不好。如果可能的话,我真的很想保留这个别名,这样我就可以将它导出到带有列标题的 csv
忽略 fx 和 tx 的东西我只是想删除对公司数据库的任何提示。如果这很重要,我通过 qsh
在 I-series DB2 上 运行这不会也输出您想要的列 headers:
SELECT
a.f1, b.f2, f3, f4, CAST( plandate/100 AS INT) as YYYYMM,
f5, f6, sum(true_dem) as MONTHLY_DEMAND
from t1 a join t2 b on a.f1 = b.f1
WHERE PLANDATE > 20180400
group by a.f1, f2, f3, f4, f5, f6, (CAST( plandate/100 AS INT))
如果您认为需要按照自己的方式进行,只需先使用子选择进行聚合即可:
SELECT
trim(f1)||chr(44)||trim(f2)||chr(44)||trim(f3)||chr(44)||trim(f4)||chr(44)
||CAST( plandate/100 AS INT)||chr(44)||trim(f5)||chr(44)||trim(f6)||chr(44)
||sum(true_dem)
as "f1, f2, f3, f4, YYYYMM, f5, f6, MONTHLY_DEMAND"
FROM (
SELECT
a.f1, b.f2, f3, f4, CAST( plandate/100 AS INT) as YYYYMM,
f5, f6, sum(true_dem) as MONTHLY_DEMAND
from t1 a join t2 b on a.f1 = b.f1
WHERE PLANDATE > 20180400
group by a.f1, f2, f3, f4, f5, f6, (CAST( plandate/100 AS INT))
) t