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 JOINISNULL 函数:

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;