Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否有方法计算列数,如果大于1,则检查B列是否满足条件跳过_Sql Server - Fatal编程技术网

Sql server 是否有方法计算列数,如果大于1,则检查B列是否满足条件跳过

Sql server 是否有方法计算列数,如果大于1,则检查B列是否满足条件跳过,sql-server,Sql Server,我正在编写一个SQL查询,其中我试图查找任何具有禁用信用卡的帐户,该帐户的文件中没有第二张活动卡。使用Select Distinct,我可以将其下放到各个行,但我不知道如何编写案例。我在想我可以使用计数来计数行,如果其中一行被列为活动行,那么一起跳过记录。因此,如果帐号显示两次,请检查其中一行是否处于活动状态,如果是,请跳过该帐号 正如我提到的,我可以解析出原始数据并提取帐户上的所有内容,但后半部分我无法完成。一般来说,我对SQL和编码相当陌生 SELECT DISTINCT dbo.

我正在编写一个SQL查询,其中我试图查找任何具有禁用信用卡的帐户,该帐户的文件中没有第二张活动卡。使用Select Distinct,我可以将其下放到各个行,但我不知道如何编写案例。我在想我可以使用计数来计数行,如果其中一行被列为活动行,那么一起跳过记录。因此,如果帐号显示两次,请检查其中一行是否处于活动状态,如果是,请跳过该帐号

正如我提到的,我可以解析出原始数据并提取帐户上的所有内容,但后半部分我无法完成。一般来说,我对SQL和编码相当陌生

SELECT   DISTINCT    dbo.loanacct.column, 

    CASE dbo.account.status
                 When '0' then 'Active'
         When '1' then 'Closed'
    End AS 'Account Status', 
                  dbo.loanacct.total_past_due_balance,

    Case dbo.card.status
        When '0' then 'Active'
        when '1' then 'Disabled'
        When '2' then 'Expired'
    END AS 'Card Status'
FROM            dbo.loanacct 
Where     Loan_group = 'Group'
         AND dbo.loanacct.status_code = 'Status Code'
     AND dbo.loanacct.total_past_due_balance <> '0.00'
         AND dbo.loanacct.status_code_no = '0'
         OR dbo.loanacct_Card_Status IS NU
我想让它做的是,当上面的例子是真的,同一个帐户,但有一个活动卡的文件,这个帐户将被跳过,我会得到一个单行返回下一个帐户,没有一个活动卡的文件

Acct# Customer Name Group Status   Code   Acct Status Card Status 
54321 Name          INSTALLMENT    Status Active      Disabled

我怀疑这会让你得到答案,如果不是的话,也会让你接近答案。你感兴趣的是CASE表达式。这还假设54321的账号不正确,应该是12345。如果有意反转该值,请参见相邻的注释

SELECT Acct#, --REVERSE(Acct#)? See comment
       [Customer Name], --it's actually advised against having spaces, and other special characters, in your object names
       [Group Status],  --as you then are forced to always quote them; and that can "break" things if poorly handled.
       Code,
       [Acct Status],
       CASE COUNT(CASE [Card Status] WHEN 'Disabled' THEN 1 END) > 0 THEN 'Disabled' ELSE 'Active'
FROM ...
GROUP BY Acct#,
         [Customer Name],
         [Group Status], 
         Code,
         [Acct Status];

我没有在这里包括FROM和WHERE,但您应该有足够的内容来完成。

如果您添加一些示例数据和预期输出,那就太好了。请显示示例数据和所需结果,这些比不满足您需要的查询有用得多。:-这很奇怪,我这里有示例代码。让我来研究一下预期产出。似乎你所追求的是一个条件聚合;这在T-SQL中是可能的。@RDBCruzer示例代码对于包含在问题中很重要。样本数据和基于该样本数据的期望输出(作为问题中的文本,而不是屏幕截图)同样重要。
SELECT Acct#, --REVERSE(Acct#)? See comment
       [Customer Name], --it's actually advised against having spaces, and other special characters, in your object names
       [Group Status],  --as you then are forced to always quote them; and that can "break" things if poorly handled.
       Code,
       [Acct Status],
       CASE COUNT(CASE [Card Status] WHEN 'Disabled' THEN 1 END) > 0 THEN 'Disabled' ELSE 'Active'
FROM ...
GROUP BY Acct#,
         [Customer Name],
         [Group Status], 
         Code,
         [Acct Status];