User 13204940 Ответов: 3

SQL-запрос соединения столбцов


Привет,

У меня есть следующие два запроса;

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

Что я уже пробовал:

Используя, Присоединиться, Внутреннее Соединение, Левое Соединение, Союз, С

OriginalGriff

Мы не можем сказать точно-мы понятия не имеем, что содержат ваши две таблицы и как они взаимосвязаны.
Возможно, если вы дадите нам примеры входных таблиц и выходных данных, которые вы ожидаете, мы сможем вам помочь?
Используйте виджет" улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

[no name]

Сделано :)

Santosh kumar Pithani

я повинуюсь вместе с @Griff

3 Ответов

Рейтинг:
20

Bryian Tan

Основываясь на выводе и ожидаемом результате, который вы предоставили, я бы рекомендовал использовать Common Table Expression (CTE). Оберните оба запроса в CTE,соедините их по клиенту и выберите нужный столбец. Вот пример

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


Выход:
Customer	Registered Extensions	Total  Extensions
Cust1	        10	                25
Cust2	        12	                36
Cust3	        61	                84


Рейтинг:
2

Richard Deeming

Другое решение:

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
;


Рейтинг:
1

Santosh kumar Pithani

выбирать
АА.название,
АА.RegisteredExtensions,
bb. тотальные растяжения от
(Выберите c.наименование "заказчик", кол-во(стр. имя) как "зарегистрированные модули" место: л, телефон п клиенты на C где c.родитель=2 и P.имя пользователя=л.имя пользователя и C.ИД=С. группа поддержки на C.имя), как АА
внутреннее соединение
(Выберите c.наименование "заказчик", кол-во(стр. имя) как "полное наращивание" от телефонов п клиенты на C, где c.родитель=2 и C.ИД=С. группа поддержки на C.имя), как ББ
на(aa.name=bb.name)
Порядок зарегистрированными расширениями файлов, АА.название