【发布时间】:2011-10-08 01:58:11
【问题描述】:
您好,我有一条 SQL 语句
INSERT INTO Foundation.TaxLiability.EmpowerSystemCalendarCode
SELECT SystemTax.SystemTaxID,
EmpowerCalendarCode.CalendarCodeID
,CASE WHEN EmpowerCalendarCode.CalendarName LIKE '%Monthly%' THEN 3
WHEN EmpowerCalendarCode.CalendarName LIKE '%Annual%' THEN 2
WHEN EmpowerCalendarCode.CalendarName LIKE '%Quarterly%' THEN 4
ELSE 0
END
FROM Foundation.Common.SystemTax SystemTax, Foundation.TaxLiability.EmpowerCalendarCode EmpowerCalendarCode
WHERE SystemTax.EmpowerTaxCode = EmpowerCalendarCode.LongAgencyCode and SystemTax.EmpowerTaxType = EmpowerCalendarCode.EmpowerTaxType
即使 CalendarName 具有 Quarterly (EOM) 之类的值,我最终仍会得到 0。任何想法和建议!
【问题讨论】:
-
如果删除第一行(
INSERT INTO...)会显示什么? -
你怎么知道表中没有 0 的行?我注意到除了 JOIN 标准之外,您实际上没有任何 WHERE 子句(这就是为什么使用显式 INNER JOIN 而不是老式表、表 JOIN 通常更好的原因)。我建议使用 SELECT 标识这些行,并暂时将目标表排除在外。
-
我同意@ypercube,如果您删除 INSERT INTO 并将重写 SELECT 替换为
SELECT SystemTax.SystemTaxID, EmpowerCalendarCode.CalendarCodeID, EmpowerCalendarCode.CalendarName。您的 CASE 语句看起来没问题,所以您的 WHERE 中一定有一些东西在扔东西。 -
根据@ypercube,但也选择
EmpowerCalendarCode.CalendarName只是为了看看你得到了什么(即,也许加入不好,它都是空值等)跨度> -
尝试返回 EmpowerCalendar.CalendarCode 列值以及 case 语句,并仅运行查询(不带插入)。这应该确保 CalendarCode 值是您认为的那样。
标签: sql sql-server-2008