Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите по T-SQL plz!  [new]
ggarek
Member

Откуда:
Сообщений: 43
Привет!

Есть две одинаковые таблицы в разных БД. В таблице есть поле "name".
Нужно посчитать сколько раз каждое имя входит в обе базы. Двумя запросами это можно сделать так:
SELECT name, COUNT(name)
FROM table1
GROUP BY name
Результат:
... ...
Луи 3
... ...

SELECT name, COUNT(name)
FROM table2
GROUP BY name
Результат:
... ...
Луи 1
... ...
Как это сделать одним запросом?
Что-то вроде этого (Но это не верно!):
SELECT name, COUNT(DB1.name), Count(DB2.name)
FROM Table1 AS DB1 INNER JOIN Table2 AS DB2
ON DB1.name = DB2.name
GROUP BY DB1.name
Результат:
... ... ...
Луи 3 3
... ... ...
3 июн 09, 17:23    [7261886]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по T-SQL plz!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
можно как-то так
select name, q1.cnt cnt1, q2.cnt cnt2
  from (SELECT name, COUNT(name) cnt
          FROM table1
         GROUP BY name
        ) q1
  full join (SELECT name, COUNT(name) cnt
               FROM table2
              GROUP BY name
             ) q2 on q2.name = q1.name
ЗЫ не проверял
3 июн 09, 17:26    [7261919]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по T-SQL plz!  [new]
ElenaG
Member

Откуда: Москва
Сообщений: 3388
SELECT 'table1' as TableName, name, COUNT(name)
FROM table1
GROUP BY name
union all
SELECT 'table2', name, COUNT(name)
FROM table2
GROUP BY name

Результат:
table1 Луи 3
table2 Луи 1

так пойдет? или столбцами нужно перевернуть?
3 июн 09, 17:29    [7261951]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по T-SQL plz!  [new]
ggarek
Member

Откуда:
Сообщений: 43
ElenaG
SELECT 'table1' as TableName, name, COUNT(name)
FROM table1
GROUP BY name
union all
SELECT 'table2', name, COUNT(name)
FROM table2
GROUP BY name

Результат:
table1 Луи 3
table2 Луи 1

так пойдет? или столбцами нужно перевернуть?


К сожалению этого не достаточно, нужно получить результат типа Луи 3 1, то есть в одной строке.
3 июн 09, 17:34    [7261988]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по T-SQL plz!  [new]
ggarek
Member

Откуда:
Сообщений: 43
Паганель
можно как-то так
select name, q1.cnt cnt1, q2.cnt cnt2
  from (SELECT name, COUNT(name) cnt
          FROM table1
         GROUP BY name
        ) q1
  full join (SELECT name, COUNT(name) cnt
               FROM table2
              GROUP BY name
             ) q2 on q2.name = q1.name
ЗЫ не проверял


Сейчас проверю =)
3 июн 09, 17:34    [7261991]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по T-SQL plz!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SELECT
 [name],
 SUM(CASE TableName WHEN 'table1' THEN 1 ELSE 0 END) cnt1,
 SUM(CASE TableName WHEN 'table2' THEN 1 ELSE 0 END) cnt2
FROM
(
 SELECT 'table1' TableName, [name] FROM table1
 UNION ALL
 SELECT 'table2' TableName, [name] FROM table2
) t
GROUP BY [name];
??
3 июн 09, 17:41    [7262057]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по T-SQL plz!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
чуть не забыл, первую строчку чуть поменять надо, а именно на такое
select IsNull(q1.name, q2.name) name, q1.cnt cnt1, q2.cnt cnt2
это из-за full join-а
3 июн 09, 17:41    [7262058]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по T-SQL plz!  [new]
ggarek
Member

Откуда:
Сообщений: 43
Всем большое спасибо за помощь!

з.ы.: Буду использовать два скрипта, предложенные Паганель`ем и iap`ом.
4 июн 09, 11:41    [7264182]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить