繁体   English   中英

如何使用多个计数和条件sql server 2008?

[英]How to use multiple count and where condition sql server 2008?

我有这两个查询

1.

select CL_Clients.cl_id,CL_Clients].cl_name,COUNT(*) AS number_of_orders
from CL_Clients,CLOI_ClientOrderItems
where CL_Clients.cl_id=CLOI_ClientOrderItems.cl_id
group by CL_Clients.cl_name,CL_Clients.cl_id

2.

select CL_Clients.cl_id,count(cloi_current_status) as dis
from CLOI_ClientOrderItems,CL_Clients
where cloi_current_status]='12'
and CL_Clients.cl_id=CLOI_ClientOrderItems.cl_id
group by CL_Clients.cl_name,CL_Clients.cl_id,CLOI_ClientOrderItems.cloi_current_status

我有这个列我需要放置计数功能和条件

[cloi_current_status] 166 30 30 30 150 150 150 150 150 150 150

一切都取决于您要获取的数据,但您可以这样处理。

SELECT Column_x, Column_y, etc..
FROM ClL_Clients a
JOIN (select CL_Clients.cl_id,CL_Clients].cl_name,COUNT(*) AS number_of_orders
from CL_Clients,CLOI_ClientOrderItems
where CL_Clients.cl_id=CLOI_ClientOrderItems.cl_id
group by CL_Clients.cl_name,CL_Clients.cl_id) b

on a.cl_id = b.cl_id

JOIN (select CL_Clients.cl_id,count(cloi_current_status) as dis
from CLOI_ClientOrderItems,CL_Clients
where cloi_current_status]='12'
and CL_Clients.cl_id=CLOI_ClientOrderItems.cl_id
group by CL_Clients.cl_name,CL_Clients.cl_id,CLOI_ClientOrderItems.cloi_current_status) c

on a.cl_id = c.cl_id
Group by BLAH BLAH

希望这能让你朝着正确的方向前进。

很简单,您只需封装查询并为它们的结果集提供一个别名,然后在公共列上的别名之间执行 JOIN。 (在下面的查询中,我假设您将通过客户 ID 加入)

SELECT *
FROM (
    SELECT CL_Clients.cl_id,
        CL_Clients].cl_name,
        COUNT(*) AS number_of_orders
    FROM CL_Clients,
        CLOI_ClientOrderItems
    WHERE CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
    GROUP BY CL_Clients.cl_name,
        CL_Clients.cl_id
    ) A
INNER JOIN (
    SELECT CL_Clients.cl_id,
        count(cloi_current_status) AS dis
    FROM CLOI_ClientOrderItems,
        CL_Clients
    WHERE cloi_current_status] = '12'
        AND CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
    GROUP BY CL_Clients.cl_name,
        CL_Clients.cl_id,
        CLOI_ClientOrderItems.cloi_current_status
    ) B
    ON A.cl_id = B.cl_id
WHERE ...
GROUP BY ...

这将被视为一个单独的结果集,因此您还可以使用WHERE或仅使用GROUP BY过滤结果,就像在普通SELECT

更新:

要回答您评论中的问题,当您加入具有相同值的列并使用的两个表时

SELECT * FROM A INNER JOIN B *将显示连接返回的所有列,这意味着 A 中的所有列和 B 中的所有列,这就是您有重复列的原因。

如果要过滤返回的列,可以指定要返回的列。 因此,在您的情况下,顶部SELECT *可以替换为

SELECT A.cl_id, A.cl_name, A.number_of_orders, B.dis所以,你的查询变成:

SELECT A.cl_id, A.cl_name, A.number_of_orders, B.dis
FROM (
    SELECT CL_Clients.cl_id,
        CL_Clients].cl_name,
        COUNT(*) AS number_of_orders
    FROM CL_Clients,
        CLOI_ClientOrderItems
    WHERE CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
    GROUP BY CL_Clients.cl_name,
        CL_Clients.cl_id
    ) A
INNER JOIN (
    SELECT CL_Clients.cl_id,
        count(cloi_current_status) AS dis
    FROM CLOI_ClientOrderItems,
        CL_Clients
    WHERE cloi_current_status] = '12'
        AND CL_Clients.cl_id = CLOI_ClientOrderItems.cl_id
    GROUP BY CL_Clients.cl_name,
        CL_Clients.cl_id,
        CLOI_ClientOrderItems.cloi_current_status
    ) B
    ON A.cl_id = B.cl_id

更新#2

对于您的最后一个问题,您需要在大查询结束时使用GROUP BY并使用HAVING条件,如下所示:

GROUP BY A.cl_id, A.cl_name, A.number_of_orders, B.dis
HAVING COUNT(cloi_current_status) > 100

暂无
暂无

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

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