【发布时间】:2023-03-07 12:51:01
【问题描述】:
出于某种我无法控制的原因,我试图简单地提取过去 12 个月的数据。但是,基本上取决于数据的大小,我必须每天查询一个临时表并从那里开始。现在我是在 DB2 中编写脚本的新手,但不是一般的 SQL,所以我尝试了下面的代码(逻辑对我来说似乎很好)。
最初我只是对将生成多少记录感兴趣,但理想情况下我想运行第二个 SELECT 代码。我一直在使用 Data Studio,但我相信导出我需要通过 CLP 运行它的数据。现在我的问题是,我在语法中遗漏了一些我无法弄清楚的东西,而且它正在引起我的注意。这很可能是非常基本的东西,或者我只是做错了。
如果我尝试 SELECT COUNT(*) 代码,我会收到以下错误:- 此行有多个标记 - DB2 for Linux, UNIX, and Windows:“”应该在“FROM”之后。 - DB2 for Linux、UNIX 和 Windows:“.”无效。
如果我尝试其他 SELECT 代码,我会收到以下错误:- DB2 for Linux, UNIX, and Windows: 应为“”而不是“SELECT MARKET_ID, 超级地区, 地区, 市场, POSA, DEST_ID, DEST_NAME, DEST_TYPE, 统计... DB2 for Linux, UNIX, and Windows:“,”应该在“FROM”之后。 DB2 for Linux, UNIX, and Windows:“,”应该在“GROUP”之后
我只是不明白。有人可以帮忙吗?之后 SESSION.l12_Dest 表似乎也不可用,我可以尝试手动查看该表。
代码:-
--<ScriptOptions statementTerminator="@"/>
CREATE OR REPLACE PROCEDURE HWW.DM_CHECKLIST()
LANGUAGE SQL
BEGIN
DECLARE GLOBAL TEMPORARY TABLE SESSION.L12_DEST
(
ACTUAL_DATE DATE,
MARKET_ID INTEGER,
SUPER_REGION VARCHAR (100),
REGION VARCHAR (100),
MARKET VARCHAR (100),
POSA VARCHAR (100),
DEST_ID INTEGER,
DEST_NAME VARCHAR (100),
DEST_TYPE VARCHAR (30),
STATUS_CODE SMALLINT,
VISITORS INTEGER
)
ON COMMIT PRESERVE ROWS NOT LOGGED;
COMMIT;
FOR V_ROW AS
SELECT ACTUAL_DATE
FROM DM.DATE_DIM
WHERE ACTUAL_DATE
BETWEEN (CURRENT_DATE - 12 MONTHS) - DAY((CURRENT_DATE - 12 MONTHS)) DAYS + 1 DAYS
AND LAST_DAY((CURRENT_DATE - 1 MONTHS))
DO
INSERT INTO SESSION.L12_DEST
SELECT B.ACTUAL_DATE,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_ID,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_SUPER_REGN_NAME,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_REGN_NAME,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_NAME,
S.SITE_CNTRY_NAME,
Z.HCOM_SRCH_DEST_ID,
Z.HCOM_SRCH_DEST_NAME,
Z.HCOM_SRCH_DEST_TYP_NAME,
LZ.STATUS_CODE,
COUNT(DISTINCT(F.VISITOR_KEY))AS VISITORS
FROM DM.LODG_DEMAND_FACT F
INNER JOIN DM.V_HCOM_SRCH_DEST_DIM Z
ON F.HCOM_SRCH_DEST_KEY = Z.HCOM_SRCH_DEST_KEY
INNER JOIN DM.DATE_DIM B
ON F.LOCAL_DEMAND_DATE_KEY = B.DATE_KEY
INNER JOIN DM.SITE_DIM S
ON S.SITE_KEY = F.SITE_KEY
LEFT JOIN LZ.LZ_HCM_DESTINATION LZ
ON Z.HCOM_SRCH_DEST_ID = LZ.DESTINATION_INT_ID
WHERE F.BRAND_KEY = 101
AND B.ACTUAL_DATE = V_ROW.ACTUAL_DATE
GROUP BY B.ACTUAL_DATE,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_ID,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_SUPER_REGN_NAME,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_REGN_NAME,
Z.HCOM_SRCH_DEST_PROPERTY_MKT_NAME,
S.SITE_CNTRY_NAME,
Z.HCOM_SRCH_DEST_ID,
Z.HCOM_SRCH_DEST_NAME,
Z.HCOM_SRCH_DEST_TYP_NAME,
LZ.STATUS_CODE;
END FOR;
--SELECT COUNT(*) FROM SESSION.L12_DEST;
--EXPORT TO C:\TEMP\MARKETS.TXT OF DEL
SELECT MARKET_ID,
SUPER_REGION,
REGION,
MARKET,
POSA,
DEST_ID,
DEST_NAME,
DEST_TYPE,
STATUS_CODE,
SUM(VISITORS)
FROM SESSION.L12_DEST
GROUP BY MARKET_ID,
SUPER_REGION,
REGION,
MARKET,
POSA,
DEST_ID,
DEST_NAME,
DEST_TYPE,
STATUS_CODE;
END @
【问题讨论】:
-
恐怕我无法为您解答,但您可能有兴趣下载一份DB2 SQL Cookbook 以供参考。
标签: sql loops db2 temp-tables