SQL CASE 存在则值
SQL CASE exist then value
我正在处理这样的 SQL 查询:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT
ARTICLES.sku,
ARTICLES.family_set,
ARTICLES.classe_article,
CASE
WHEN EXISTS (SELECT CATALOG_PAGE2 FROM ODS.ARTICLECOMPANY14 WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku)
THEN "Get the catalog_page2 value"
ELSE '0'
END AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES;
QUIT;
我在 "Then" 语句中失败了,我尝试了几种方法来替换 "Get the catalog_page2 value" 但没有任何效果(比如字段名称)
我认为这是因为 "exist" 说是/否但不知道该怎么做...
也许还有其他解决方案?
我尝试 join
,但我失去了价值,因为我的 table ARTICLECOMPANY14
的价值低于 ARTICLES
.
我的目标是获取值(如果存在),否则输入“0”。
感谢您的帮助。
proc sql
支持 exists
。我怀疑问题可能出在双引号上:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT a.sku, a.family_set, a.classe_article,
(CASE WHEN EXISTS (SELECT 1
FROM ODS.ARTICLECOMPANY14 oc
WHERE oc.ITEMNUM = a.sku)
THEN 'Get the catalog_page2 value'
ELSE '0'
END) AS pag_cat_mega
FROM WORK.ARTICLES a ;
编辑:
我怀疑你只是想要一个 LEFT JOIN
:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT a.sku, a.family_set, a.classe_article, oc.catalog_page2
FROM WORK.ARTICLES a LEFT JOIN
ODS.ARTICLECOMPANY14 oc
ON oc.ITEMNUM = a.sku;
如果您不希望它显示为 NULL
,请在 SELECT
中使用 coalesce()
,或者:
COALESCE(oc.catalog_page2, 0)
或
COALESCE(oc.catalog_page2, '0')
取决于列的类型。
PROC SQL;
CREATE TABLE WORK.test
AS SELECT ARTICLES.sku
, ARTICLES.family_set
, ARTICLES.classe_article
, CASE WHEN EXISTS
BEGIN
(
SELECT CATALOG_PAGE2
FROM ODS.ARTICLECOMPANY14
WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku
)
THEN PRINT 'Get the catalog_page2 value'
END
ELSE '0'
END AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES ;
QUIT;
此外,对于您的 THEN 子句,您是否正在寻找它的 ECHO/PRINT "Get the Catalog_page2" 值?如果没有,您需要创建一个变量来提取 Catalog_2 值并且不要忘记您的单引号。
我希望这至少能帮助您指明正确的方向。
好吧,我建议您将其改造成 LEFT JOIN
和 ISNULL
函数:
SELECT ARTICLES.sku,
ARTICLES.family_set,
ARTICLES.classe_article,
COALESCE(ACompany.CATALOG_PAGE2,0) AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES
LEFT JOIN ODS.ARTICLECOMPANY14 AS ACompany
ON ACompany.ITEMNUM = ARTICLES.sku;
我可能来晚了一点,但这是解决方案:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT
ARTICLES.sku,
ARTICLES.family_set,
ARTICLES.classe_article,
CASE
WHEN EXISTS (SELECT CATALOG_PAGE2 FROM ODS.ARTICLECOMPANY14 WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku)
THEN (SELECT CATALOG_PAGE2 FROM ODS.ARTICLECOMPANY14 WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku)
ELSE '0'
END AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES;
QUIT;
我正在处理这样的 SQL 查询:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT
ARTICLES.sku,
ARTICLES.family_set,
ARTICLES.classe_article,
CASE
WHEN EXISTS (SELECT CATALOG_PAGE2 FROM ODS.ARTICLECOMPANY14 WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku)
THEN "Get the catalog_page2 value"
ELSE '0'
END AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES;
QUIT;
我在 "Then" 语句中失败了,我尝试了几种方法来替换 "Get the catalog_page2 value" 但没有任何效果(比如字段名称)
我认为这是因为 "exist" 说是/否但不知道该怎么做...
也许还有其他解决方案?
我尝试 join
,但我失去了价值,因为我的 table ARTICLECOMPANY14
的价值低于 ARTICLES
.
我的目标是获取值(如果存在),否则输入“0”。
感谢您的帮助。
proc sql
支持 exists
。我怀疑问题可能出在双引号上:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT a.sku, a.family_set, a.classe_article,
(CASE WHEN EXISTS (SELECT 1
FROM ODS.ARTICLECOMPANY14 oc
WHERE oc.ITEMNUM = a.sku)
THEN 'Get the catalog_page2 value'
ELSE '0'
END) AS pag_cat_mega
FROM WORK.ARTICLES a ;
编辑:
我怀疑你只是想要一个 LEFT JOIN
:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT a.sku, a.family_set, a.classe_article, oc.catalog_page2
FROM WORK.ARTICLES a LEFT JOIN
ODS.ARTICLECOMPANY14 oc
ON oc.ITEMNUM = a.sku;
如果您不希望它显示为 NULL
,请在 SELECT
中使用 coalesce()
,或者:
COALESCE(oc.catalog_page2, 0)
或
COALESCE(oc.catalog_page2, '0')
取决于列的类型。
PROC SQL;
CREATE TABLE WORK.test
AS SELECT ARTICLES.sku
, ARTICLES.family_set
, ARTICLES.classe_article
, CASE WHEN EXISTS
BEGIN
(
SELECT CATALOG_PAGE2
FROM ODS.ARTICLECOMPANY14
WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku
)
THEN PRINT 'Get the catalog_page2 value'
END
ELSE '0'
END AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES ;
QUIT;
此外,对于您的 THEN 子句,您是否正在寻找它的 ECHO/PRINT "Get the Catalog_page2" 值?如果没有,您需要创建一个变量来提取 Catalog_2 值并且不要忘记您的单引号。
我希望这至少能帮助您指明正确的方向。
好吧,我建议您将其改造成 LEFT JOIN
和 ISNULL
函数:
SELECT ARTICLES.sku,
ARTICLES.family_set,
ARTICLES.classe_article,
COALESCE(ACompany.CATALOG_PAGE2,0) AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES
LEFT JOIN ODS.ARTICLECOMPANY14 AS ACompany
ON ACompany.ITEMNUM = ARTICLES.sku;
我可能来晚了一点,但这是解决方案:
PROC SQL;
CREATE TABLE WORK.test AS
SELECT
ARTICLES.sku,
ARTICLES.family_set,
ARTICLES.classe_article,
CASE
WHEN EXISTS (SELECT CATALOG_PAGE2 FROM ODS.ARTICLECOMPANY14 WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku)
THEN (SELECT CATALOG_PAGE2 FROM ODS.ARTICLECOMPANY14 WHERE ODS_ARTICLECOMPANY14.ITEMNUM = ARTICLES.sku)
ELSE '0'
END AS pag_cat_mega
FROM WORK.ARTICLES AS ARTICLES;
QUIT;