加入列SQL查询 [英] Join columns SQL query

查看:115
本文介绍了加入列SQL查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我有以下两个问题;



Hi,

I have the following two queries;

SELECT c.name as "Customer", count(p.name) as "Registered Extensions" FROM location l, phones p, customers c WHERE c.parent=2 AND p.username=l.username AND c.id=p.customer GROUP BY c.name







SELECT c.name as "Customer", count(p.name) as "Total Extensions" FROM phones p, customers c WHERE c.parent=2 AND c.id=p.customer GROUP BY c.name
ORDER BY "Registered Extensions" DESC, c.name





如何使用以下列返回结果?:



客户|注册扩展|总延期



第一个查询返回:



客户|已注册的扩展程序

Cust1 | 10

Cust2 | 12

Cust3 | 61



第二个查询返回:



客户|总延期

Cust1 | 25

Cust2 | 36

Cust3 | 84



因此最终查询应该返回:

客户|注册扩展|总延期

Cust1 | 10 | 25

Cust2 | 12 | 36

Cust3 | 61 | 84



我尝试过:



使用,加入,内部Join,Left Join,Union,With



How can I return a result with the following columns?:

Customer | Registered Extensions | Total Extensions

The first query returns:

Customer | Registered Extensions
Cust1 | 10
Cust2 | 12
Cust3 | 61

The second query returns:

Customer | Total Extensions
Cust1 | 25
Cust2 | 36
Cust3 | 84

So the final query should return:
Customer | Registered Extensions | Total Extensions
Cust1 | 10 | 25
Cust2 | 12 | 36
Cust3 | 61 | 84

What I have tried:

Using, Join, Inner Join, Left Join, Union, With

推荐答案

根据您提供的输出和预期结果,我建议使用Common Table Expression(CTE)。将查询包装在CTE中,按客户连接,然后选择所需的列。这是一个例子



Based on the output and expected result you had provided, I would recommend to use Common Table Expression (CTE). Wrap both the query in the CTE , join them by customer and them select the desired column. Here is an example

WITH cteQuery1 AS (
	SELECT c.name as "Customer", count(p.name) as "Registered Extensions" 
	FROM location l, phones p, customers c WHERE c.parent=2 AND p.username=l.username AND c.id=p.customer 
	GROUP BY c.name
),  cteQuery2 AS (
	SELECT c.name as "Customer", count(p.name) as "Total Extensions" 
	FROM phones p, customers c WHERE c.parent=2 AND c.id=p.customer GROUP BY c.name
	ORDER BY "Registered Extensions" DESC, c.name
)
SELECT c1.Customer, c1.[Registered Extensions], t.[Total  Extensions] FROM cteQuery1 c1
JOIN cteQuery2 t
ON c1.Customer = t.Customer





输出:



Output:

Customer	Registered Extensions	Total  Extensions
Cust1	        10	                25
Cust2	        12	                36
Cust3	        61	                84


select

aa.name,

aa.RegisteredExtensions,

(SELECT c.name asCustomer,count( p.name)asRegistered ExtensionsFROM location l,phones p,customers c WHERE c.parent = 2 AND p.username = l.username AND c.id = p.customer GROUP BY c.name)as aa

内部联接

(SELECT c.name asCustomer,count(p.name)asTotal ExtensionsFROM phones p,customers c WHERE c.parent = 2 AND c.id = p.customer GROUP BY c.name)as bb

on(aa.name = bb.name)

ORDER BY Registered Extensions DESC,aa.name
select
aa.name,
aa.RegisteredExtensions,
bb.TotalExtensions from
(SELECT c.name as "Customer", count(p.name) as "Registered Extensions" FROM location l, phones p, customers c WHERE c.parent=2 AND p.username=l.username AND c.id=p.customer GROUP BY c.name)as aa
inner join
(SELECT c.name as "Customer", count(p.name) as "Total Extensions" FROM phones p, customers c WHERE c.parent=2 AND c.id=p.customer GROUP BY c.name) as bb
on(aa.name=bb.name)
ORDER BY Registered Extensions DESC, aa.name


另一个解决方案:

Another solution:
SELECT
    c.name As "Customer",
    (
        SELECT Count(1) 
        FROM phones As p 
        INNER JOIN locations As l 
        ON l.username = p.username 
        WHERE p.customer = c.id
    ) As "Registered Extensions",
    (
        SELECT Count(1) 
        FROM phones As p 
        WHERE p.customer = c.id
    ) As "Total Extensions"
FROM
    customers As C
WHERE
    c.parent = 2
;


这篇关于加入列SQL查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆