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

Откуда:
Сообщений: 3
Хотелось бы задать фильтр и получить результаты всех возможностей, даже если строчки не существуют.

Допустим у меня есть следующая таблица:

КомпанияКлиентБаланс
1a200
1a150
1b300
2z100
2c50
2a500
3d300


Я бы хотел получить баланс между определенными компаниями и клиентами, но если баланса нету то чтоб эти строчки тоже учавствовали в результатах.

Я задаю: Group by Компания, Group by Клиент, Sum Баланс where = компания in (1,2,4) AND клиент = in (a,b,d) (я упростил синтакс, просто чтоб сама суть была понятна)
Результат получается такой:

1a350
1b150
2a500


А мне нужен такой:

1a350
1b150
1dNULL
2a500
2bNULL
2dNULL
4aNULL
4bNULL
4dNULL


Я пробовал GROUP BY ALL, подключать оба таблиц через OUTER LEFT JOIN. ничего не даёт именно такого результата.

Спасибо!
13 фев 12, 03:30    [12079267]     Ответить | Цитировать Сообщить модератору
 Re: Получить все результаты, даже те которые NULL  [new]
Philin
Member

Откуда: г. Иркутск
Сообщений: 162
CREATE TABLE #MyTable ([Компания] int, [Клиент] varchar(1), [Баланс] int)

INSERT INTO #MyTable
  SELECT 1,	'a', 200 UNION
  SELECT 1,	'a', 150 UNION
  SELECT 1,	'b', 300 UNION
  SELECT 2,	'z', 100 UNION
  SELECT 2,	'c', 50 UNION
  SELECT 2,	'a', 500 UNION
  SELECT 3,	'd', 300
  
SELECT Com.[Компания], Cl.[Клиент], sum(T.[Баланс])
FROM (select 'a' [Клиент] union select 'b' union select 'd') Cl
CROSS JOIN (select 1 [Компания] union select 2 union select 4) Com
LEFT JOIN #MyTable T ON T.[Клиент] = Cl.[Клиент]
					and T.[Компания] = Com.[Компания]
GROUP BY Com.[Компания], Cl.[Клиент]
ORDER BY 1, 2

DROP TABLE #MyTable
13 фев 12, 05:34    [12079299]     Ответить | Цитировать Сообщить модератору
 Re: Получить все результаты, даже те которые NULL  [new]
whatever61
Member

Откуда:
Сообщений: 3
Philin,

Гений =)
13 фев 12, 05:43    [12079304]     Ответить | Цитировать Сообщить модератору
 Re: Получить все результаты, даже те которые NULL  [new]
whatever61
Member

Откуда:
Сообщений: 3
whatever61,

У меня что-то не получается это соеденить внутри настоящей датабазы =(
Название таблы: J_Transactions
Колонка компании: CompanyAccountID
Колонка клиента: AccountID
Колонка баланса: MainUnRecBalance

компании которые должны быть показаны: 1, 4, 7735, 9229, 5753
клиенты которые должны быть показаны: 3995, 5355, 9238, 5779, 5159

Вроде бы всё заменил правильно, но не получается всё равно.
13 фев 12, 16:38    [12082870]     Ответить | Цитировать Сообщить модератору
 Re: Получить все результаты, даже те которые NULL  [new]
BERSERC
Member

Откуда:
Сообщений: 442
CREATE TABLE J_Transactions (CompanyAccountID int, AccountID int, MainUnRecBalance money)

INSERT INTO J_Transactions
  SELECT 1,	3995, 200 UNION all
  SELECT 1,	3995, 150 UNION all
  SELECT 1,	 5355, 300 UNION all
  SELECT 4,	 5355, 100 UNION all
  SELECT 4,	0, 50 UNION all
  SELECT 7735,	0, 500 UNION all
  SELECT 3,	0, 300
  
  


select C.ID CompanyAccountID, A.ID AccountID, SUM( MainUnRecBalance) Balance   from 
(
	select  1 ID
	union select 4
	union select 7735 
	union select 9229 
	union select 5753
) C 
cross join 
(
	select 3995 ID 
	union select  5355 
	union select  9238
	union select  5779
	union select  5159
) A 
left join J_Transactions t on T.CompanyAccountID = C.ID and T.AccountID = A.ID 
group by C.ID, A.ID 
order by 1,2

DROP TABLE J_Transactions
14 фев 12, 16:26    [12090198]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить