SQL Case语句还是其他方法?

SQL Case语句还是其他方法?,sql,Sql,我将使用我的输出放入Excel数据透视表中。数据处理的是已冲销或未冲销的信用账户 编辑:如果在数据透视表中选中了记帐,则我希望totalaccounts列是总帐户的计数,而不考虑chargeoffdate值。如果未选中chargeoffdate,我希望totalaccounts是chargeoffdate为空时所有帐户的计数 以下是迄今为止我的SQL语法: SELECT c.brand, CASE WHEN a.chargeoffdate IS NULL THEN 'No Chargeoff

我将使用我的输出放入Excel数据透视表中。数据处理的是已冲销或未冲销的信用账户

编辑:如果在数据透视表中选中了记帐,则我希望totalaccounts列是总帐户的计数,而不考虑chargeoffdate值。如果未选中chargeoffdate,我希望totalaccounts是chargeoffdate为空时所有帐户的计数

以下是迄今为止我的SQL语法:

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