【发布时间】:2013-01-16 20:54:44
【问题描述】:
我有 2 张桌子:
AppDetailFee table has AppID (PK), TypeID, Amount
AppDetail table has AppID (PK)
我在 AppID 上加入了两个表,我需要检查以下内容的 TypeID 和数量。有3种情况:
If TypeID = 6 and Amount = 0 then print appid and amount zero
If typeID = 6 and amount <> 0 - bypass and do not print
When TypeID <> 6 then print zero
下面是我使用的代码,但是我得到了所有不等于零且数量为零的行的结果。
任何帮助将不胜感激。 谢谢
SELECT ad.AppID
, MAX(case when (adf.TypeID = 6 AND adf.Amount = 0) then 0
when (adf.TypeID = 6 AND adf.Amount <> 0) then Adf.Amount
ELSE 0 END) AS FeeAmount
FROM
AppDetail AS ad
inner join AppDetailFee adf ON
ad.AppID = adf.AppID
WHERE adf.Amount =0
【问题讨论】:
-
只是在这里猜测,但您的 where 语句说“Where adf.Amount=0”不会排除任何行是 adf.Amount 0。这意味着第二个 case 语句永远不会是真的。
-
这绝对不是您正在使用的实际代码,因为您有一个没有
GROUP BY的聚合 (MAX),它甚至不会在 SQL Server 中解析。请出示您的 ACTUAL 代码。 -
如果使用 MAX 还需要使用 GROUP BY 子句
-
当我将代码复制到这里时,group by 被转移了。我确实说过代码正在运行,但还有其他问题。因此,Group By 并没有丢失。
标签: sql sql-server-2008 case inner-join