我正在尝试收集一个项目的销售数据,但我在主查询中使用的cte查询出现了问题。
SELECT
CONCAT(
CONCAT(
VARCHAR_FORMAT(INFO.DATE, 'YYYYMMDD'),
CAST(INFO.INVOICE AS VARCHAR)
),
CAST(INFO.STORE AS VARCHAR)
) AS HEADER,
CASE WHEN INFO.CUSTOMER_NUMBER IN (999990, 999991)
THEN 'CASH' ELSE 'CHARGE' END AS CUST_TYPE,
INFO.STORE,
INFO.INVOICE,
INFO.DATE,
INFO.SALES_UNITS,
INFO.SALES
FROM
DATALAKE.SLSINFO INFO
WHERE
INFO.DATE >= '2019-01-01'
AND INFO.STORE = 163
AND INFO.INVOICE = 100349
ORDER BY
HEADER ASC
此查询应创建一个唯一的标题,然后使用客户编号将发票分类为现金客户或借记客户,并返回一些关联值。
在本例中,我查看特定的日期/商店/发票进行测试,结果是:
| 集管|客户类型|储存|发票|日期|销售_单位|销售部|
| - -|- -|- -|- -|- -|- -|- -|
| 20190101100349163号文件|现金|一百六十三|小行星100349| 2019年1月1日|四个|九点九六分|
| 20190101100349163号文件|现金|一百六十三|小行星100349| 2019年1月1日|一个|十点九十九分|
| 20190101100349163号文件|现金|一百六十三|小行星100349| 2019年1月1日|一个|二点九九分|
我尝试通过添加SALES_UNITS和SALES列,为每个唯一的标题创建一行。我尝试使用的查询如下:
SELECT
CONCAT(CONCAT(VARCHAR_FORMAT(INFO.DATE, 'YYYYMMDD'), CAST(INFO.INVOICE AS VARCHAR)), CAST(INFO.STORE AS VARCHAR)) AS HEADER,
CASE WHEN INFO.CUSTOMER_NUMBER IN (999990, 999991) THEN 'CASH' ELSE 'CHARGE' END AS CUST_TYPE,
INFO.STORE,
INFO.INVOICE,
INFO.DATE,
SUM(INFO.SALES_UNITS) AS UNITS,
SUM(INFO.SALES) AS SALES
FROM
DATALAKE.SLSINFO INFO
WHERE
INFO.DATE >= '2019-01-01'
AND INFO.STORE = 163
AND INFO.INVOICE = 100349
ORDER BY
HEADER ASC
理想的输出如下所示
| 集管|客户类型|储存|发票|日期|单位|销售部|
| - -|- -|- -|- -|- -|- -|- -|
| 20190101100349163号文件|现金|一百六十三|小行星100349| 2019年1月1日|六个|二十三点九四|
但是,第二个查询没有运行,我收到SQL错误[S1000]:一般错误,无其他信息。
我已经尝试过在原始查询和第二个查询中按标题分组,但它不允许我按任何内容分组,我还没有弄清楚为什么会这样。
任何见解都将不胜感激!
1条答案
按热度按时间yebdmbv41#
您可以使用with子句给予原始查询命名(我将其命名为T),然后只获取总和并按其他列分组。