SQL Case语句还是其他方法?
我将使用我的输出放入Excel数据透视表中。数据处理的是已冲销或未冲销的信用账户 编辑:如果在数据透视表中选中了记帐,则我希望totalaccounts列是总帐户的计数,而不考虑chargeoffdate值。如果未选中chargeoffdate,我希望totalaccounts是chargeoffdate为空时所有帐户的计数 以下是迄今为止我的SQL语法:SQL Case语句还是其他方法?,sql,Sql,我将使用我的输出放入Excel数据透视表中。数据处理的是已冲销或未冲销的信用账户 编辑:如果在数据透视表中选中了记帐,则我希望totalaccounts列是总帐户的计数,而不考虑chargeoffdate值。如果未选中chargeoffdate,我希望totalaccounts是chargeoffdate为空时所有帐户的计数 以下是迄今为止我的SQL语法: SELECT c.brand, CASE WHEN a.chargeoffdate IS NULL THEN 'No Chargeoff
SELECT
c.brand,
CASE WHEN a.chargeoffdate IS NULL THEN 'No Chargeoffs'
-- Below here should not be only chargeoffs, it should be chargeoffs + the column above ^^^
WHEN a.chargeoffdate IS NOT NULL THEN 'Chargeoffs'
ELSE 'Unknown' END AS chargeoffs,
COUNT(*) AS totalaccounts
FROM accounts
GROUP BY brand, chargeoffs
您可以在我的SQL中看到注释以了解我的目的,但我不知道如何实现这一点
我试过:
CASE WHEN a.chargeoffdate IS NULL THEN 'No Chargeoffs'
-- Below here should not be only chargeoffs, it should be chargeoffs + the column above ^^^
WHEN (a.chargeoffdate IS NOT NULL OR a.chargeoffdate IS NULL) THEN 'Chargeoffs Included'
ELSE 'Unknown' END AS chargeoffs
但是由于某种原因,得到了与top查询相同的结果。谢谢
另一个编辑:需要输出
BRAND 1 | WITH CHARGEOFFS | COUNT(TOTALACCOUNTS)
BRAND 1 | WITHOUT CHARGEOFFS | COUNT(TOTALACCOUNTS)
BRAND 2 | WITH CHARGEOFFS | COUNT(TOTALACCOUNTS)
BRAND 2 | WITHOUT CHARGEOFFS | COUNT(TOTALACCOUNTS)
更新:
冲销=所有账户的计数,无论冲销日期是否为空
无冲销=冲销日期为空的所有账户的计数(未冲销)
更新:我累了,我得到了这个长SQL,它接近你想要的:
SELECT brand,
tp,
CASE WHEN TP = 1 then sum(cnt) END as 'No Chargeoffs',
sum(cnt) as "Chargeoffs"
FROM(
SELECT
brand,
CASE WHEN a.chargeoffdate IS NULL THEN 1 ELSE 0 END as tp
count(*) as cnt
FROM accounts
GROUP BY brand, CASE WHEN a.chargeoffdate IS NULL THEN 1 ELSE 0 END
GROUP BY brand, tp
这有点愚蠢,我的解决办法很简单。我只是留下了我的想法,pivot表为我将它们添加到了一起
我在创建了两个单独的查询并使用SAS进行了一些数据操作以获得我想要的结果后发现了这一点。哎哟。您的表中是chargeoff列和非ChargeOffs列,还是表中某列中的值?这似乎是一个奇怪的条件:
a.chargeoffdate不为NULL或a.chargeoffdate为NULL
您是否知道它将始终计算为true?chargeoffdate是该列。如果为空,则未冲销,否则已冲销。chargeoffs只是一个别名,这就是我如何对case语句进行分组,以便它可以在pivot表@abe中使用,我希望它始终为true,因为我希望包括所有值,或者包括所有值减去已冲销的帐户,然后将其分组,为什么不使用else语句呢?据我所知,您当前的else无法访问,那么我的所有其他列都是计数,所以说我计数(*),我希望我的输出是:ChargeOffices=所有帐户的计数无论chargeoffdate是否为空,没有ChargeOffices=chargeoffdate为空的所有帐户的计数(它们没有被冲销)好的,请用整个sql更新您的帖子,或者一些重要的事情,为了让我们理解,我只是编辑了我的问题,让它更容易理解,如果你需要更多的解释,请告诉我一些关于这个编辑的事情。它得到了我想要的东西,但我需要对它进行分组,以便在透视表中用作复选框。这可能吗?另外,我认为你的第二列应该是一个总和,而不是count是的。每隔一列是一个计数或总和,因此总共有4行。2个品牌,每个品牌有2个扣款或不扣款。品牌1 |退单品牌1 |无退单品牌2 |退单品牌2 |无退单
SELECT brand,
tp,
CASE WHEN TP = 1 then sum(cnt) END as 'No Chargeoffs',
sum(cnt) as "Chargeoffs"
FROM(
SELECT
brand,
CASE WHEN a.chargeoffdate IS NULL THEN 1 ELSE 0 END as tp
count(*) as cnt
FROM accounts
GROUP BY brand, CASE WHEN a.chargeoffdate IS NULL THEN 1 ELSE 0 END
GROUP BY brand, tp