简体   繁体   English

MySQL案例数

[英]MySQL Case Count

Hi I'm having a confusion on how to do this query. 嗨,我对如何执行此查询感到困惑。

I have tables: 我有桌子:

transactiondetails
-> TransactionDetailsID
-> TerminalID
-> SiteID
-> TransactionType
-> Amount

terminals
-> TerminalID
-> TerminalName
-> TerminalType

Now, on table terminals.TerminalType the values is either 0 or 1. In my transactiondetails I need to find the total number of terminals.TerminalType = 1 in a particular SiteID in the table transactiondetails so my query is 现在,在表terminal.TerminalType上,值是0或1。在我的transactiondetails中,我需要找到表transactiondetails中特定SiteID中的terminals.TerminalType = 1的总数,因此我的查询是

SELECT 
CASE 
WHEN b.TerminalType IN (1) then COUNT(a.TerminalID)
ELSE 0 END AS TotalGenesis, a.SiteID
FROM npos.transactiondetails a
LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
WHERE a.SiteID = 167;

But I got zero result for TotalGenesis even if I have a TerminalType = 1 in my transactiondetails. 但是,即使我的transactiondetails中的TerminalType = 1,TotalGenesis的结果也为零。

Thanks for the help. 谢谢您的帮助。

Use this query. 使用此查询。 Instead of using IN use equal(=) sign. 代替使用IN使用equal(=)符号。 See Below: 见下文:

SELECT 
      CASE 
          WHEN b.TerminalType = 1 THEN COUNT(a.TerminalID)
          ELSE 0 
      END AS TotalGenesis, 
      a.SiteID
FROM npos.transactiondetails a
LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
WHERE a.SiteID = 167;

Perhaps the join is failing? 联接失败了吗? That would cause it to return zero. 那将导致它返回零。 Are you sure TerminalType isn't null? 您确定TerminalType不为null吗?

Do either of these queries return the correct result? 这些查询是否返回正确的结果?

SELECT 
    CASE
        WHEN b.TerminalType IN (1) then COUNT(a.TerminalID)
        ELSE 0
    END AS TotalGenesis,
    a.SiteID
FROM npos.transactiondetails a
LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
WHERE a.SiteID = 167
GROUP BY a.SiteID;

SELECT 
    SUM(CASE
        WHEN b.TerminalType IN (1) then 1
        ELSE 0
    END) AS TotalGenesis,
    a.SiteID
FROM npos.transactiondetails a
LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
WHERE a.SiteID = 167;

Either way it appears that you want an inner join and not a left join. 无论哪种方式,似乎都需要内部联接而不是左联接。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM