繁体   English   中英

在SQL Server中使用case语句选择SELECT AS

[英]Using a case statement to SELECT AS in SQL Server

我有一段代码,在其中我要连接两个表并选择某些列,将其中一列(NetMarkdown)相加,然后希望根据单独的列(MKUP_MKDN_RSN_CD)的值将其选择为3个不同的列。 我的代码如下:

SELECT ITEM_ID, MVNDR_PRTY_ID as 'MVNDR_PRTY_ID', sum(NetMarkdown)=(CASE MKUP_MKDN_RSN_CD
WHEN 4 THEN as 'Code4' 
WHEN 23 THEN as 'Code 23'
ELSE as 'Code Other'
END), 
FSCL_WK_DESC INTO ##temp FROM
STRMKDN LEFT JOIN TimeHierarchy
ON CAL_PRD_END_DT=CAL_DT
group by ITEM_ID, MVNDR_PRTY_ID, FSCL_WK_DESC, MKUP_MKDN_RSN_CD

我在第1行收到一条错误消息,提示“'='附近的语法不正确”。

我要完全解决这个问题吗? 解决这个问题的正确方法是什么? 谢谢你的帮助

做三个单独的总和:

SELECT ITEM_ID, MVNDR_PRTY_ID as 'MVNDR_PRTY_ID',
    sum(CASE WHEN MKUP_MKDN_RSN_CD = 4 THEN NetMarkdown END) as Code4,
    sum(CASE WHEN MKUP_MKDN_RSN_CD = 23 THEN NetMarkdown END) as Code23,
    sum(CASE WHEN MKUP_MKDN_RSN_CD != 4 and
                  MKUP_MKDN_RSN_CD != 23 THEN NetMarkdown END) as CodeOther,
FSCL_WK_DESC INTO ##temp FROM
STRMKDN LEFT JOIN TimeHierarchy
ON CAL_PRD_END_DT=CAL_DT
group by ITEM_ID, MVNDR_PRTY_ID, FSCL_WK_DESC

现有代码的问题是,您正在有效地尝试更改结果集中出现的列(即,假设没有行的原因码为4)-您无法在动态SQL之外执行此操作。

此刻,如果从未看到特定的原因码,则将产生NULL如果要避免这种情况,请用COALESCE(SUM(...),0)SUM(...)包装起来

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM