|
"ОБЪЕДИНИТЬ ВСЕ" в запросе MS SQL | ☑ | ||
---|---|---|---|---|
0
Vladal
10.05.12
✎
18:36
|
У меня есть простой запрос по трём таблицам. Я хочу скомпоновать существующие не повторяющиеся записи.
SELECT distinct [DBCode] as Id, [DBCode] as Door, null as DocIn, null as Cards FROM [EX].[dbo].[DoorCounters] union all SELECT distinct [DBCode] as Id, null as door, [DBCode], null as docin FROM [EX].[dbo].[DocumentsIn] union all SELECT distinct [DBCode] as Id, null as door, null as docin, [DBCode] as DisCounts FROM [EX].[dbo].[DiscountCards] Поле DBCode - идентификатор распределенной базы. Я хочу получить такую таблицу: Id Door DocIn Cards AT AT AT AT AG AG AG NULL AJ AJ NULL NULL BX BX BX BX AR AR AR AR Т.е. нет входящих документов от базы AJ и нет карточек от баз AJ и AG А d моём запросе получается такая: Id Door DocIn Cards AT AT NULL NULL AG AG NULL NULL AJ AJ NULL NULL BX BX NULL NULL AR AR NULL NULL AG NULL AG NULL AR NULL AR NULL AT NULL AT NULL BX NULL BX NULL AR NULL NULL AR AT NULL NULL AT BX NULL NULL BX Как исправить? |
|||
1
acsent
10.05.12
✎
18:37
|
сгруппировать и максимум
|
|||
2
Vladal
10.05.12
✎
18:38
|
ага. А каким словом это SQL?
|
|||
3
aleks-id
10.05.12
✎
18:40
|
groupby
|
|||
4
Fragster
гуру
10.05.12
✎
18:41
|
попутал union и join
|
|||
5
Vladal
10.05.12
✎
18:44
|
Грубо говоря, в 1С это я делал примерно так:
ВЫБРАТЬ Банки.Ссылка, Банки.Код КАК Банки, "" КАК Счета, "" КАК Карты ИЗ Справочник.Банки КАК Банки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ БанковскиеСчета.Ссылка, "", БанковскиеСчета.Код, "" ИЗ Справочник.БанковскиеСчета КАК БанковскиеСчета ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ИнформационныеКарты.Ссылка, "", "", ИнформационныеКарты.Код ИЗ Справочник.ИнформационныеКарты КАК ИнформационныеКарты --------------------------------------------------- (4) Джоин вооще ругается, что неправильная конструкция. Как его синтаксис узнать? |
|||
6
Fragster
гуру
10.05.12
✎
18:45
|
(5).2 синтаксис такой же, как в 1с
|
|||
7
Vladal
10.05.12
✎
18:47
|
(6) не хотит.
|
|||
8
catena
10.05.12
✎
18:52
|
(4)Почему? "Объединить все" - это же как раз union all
Из(5) таблица (0) ну никак не получится. |
|||
9
Господин ПЖ
10.05.12
✎
18:52
|
>Как его синтаксис узнать?
поставить BOL к скулю... или в msdn пошарить |
|||
10
Господин ПЖ
10.05.12
✎
18:53
|
>Из(5) таблица (0) ну никак не получится.
+ 100 |
|||
11
Vladal
10.05.12
✎
18:54
|
(8) это я к примеру. Так как сделать таблицу в (0)?
|
|||
12
catena
10.05.12
✎
18:58
|
(11)Не знаю, я вообще не поняла, что требуется. Но из (5) точно не получится - там тоже будут "" во всех строках.
|
|||
13
Vladal
10.05.12
✎
18:59
|
(12) У меня есть три таблицы, я из них получаю идентификаторы баз, которые прислали свои данные (Выбрать Различные)
|
|||
14
catena
10.05.12
✎
19:00
|
(13)Нет, ты получаешь все различные идентификаторы баз и расставляешь их в разном порядке в строках. Зачем не понятно.
|
|||
15
Vladal
10.05.12
✎
19:01
|
Т.е. они шлют свои данные и в каждой строке свой ИД.
Я же хочу получить сводную таблицу, какие данные в целом пришли из каких баз? Id Door DocIn Cards AT AT AT AT AG AG AG NULL AJ AJ NULL NULL BX BX BX BX AR AR AR AR Т.е. нет входящих документов от базы AJ и нет карточек от баз AJ и AG |
|||
16
Fragster
гуру
10.05.12
✎
19:01
|
500 рублей
|
|||
17
Vladal
10.05.12
✎
19:03
|
Может, заменить значения? Если не Null, то просто "+". Тогда будет так:
Id Door DocIn Cards AT + + + AG + + NULL AJ + NULL NULL BX + + + AR + + + |
|||
18
Vladal
10.05.12
✎
19:03
|
(16) 500 рублей на 1слансер. Это миста
|
|||
19
Vladal
10.05.12
✎
19:03
|
(16) Вот ты просто подскажи, как написать, я же не прошу вместо меня писать.
|
|||
20
Fragster
гуру
10.05.12
✎
19:03
|
(18) ну, чем мог - помог в (4)
|
|||
21
Vladal
10.05.12
✎
19:03
|
те более, я уже селал какие-то шаги
|
|||
22
Vladal
10.05.12
✎
19:04
|
(20) Скажи, как этот джоин работает в моём примере? Мне скуль ругается на синтаксис, что нельзя в джоине писать селект
|
|||
23
catena
10.05.12
✎
19:06
|
Ааа, кажется врубилась.
Ну тогда действительно join on |
|||
24
Fragster
гуру
10.05.12
✎
19:08
|
(22) можно, точно также, как в 1с
|
|||
25
catena
10.05.12
✎
19:08
|
(22)Ты соединения в 1с умеешь делать? То же самое, "соединение....по" = "join ... on"
|
|||
26
Vladal
10.05.12
✎
19:09
|
не объединить? вложенный запрос
|
|||
27
catena
10.05.12
✎
19:10
|
(26)Зачем там вложенный?
|
|||
28
Vladal
10.05.12
✎
19:11
|
вроде соединения по влоэенным запросам
|
|||
29
Fragster
гуру
10.05.12
✎
19:13
|
(28) зря отказался от (16)
|
|||
30
catena
10.05.12
✎
19:13
|
Кстати, можно и (0) допилить, наверное... как-то так:
select ID, max(Door), max(DocIn), max(Cards ) from(SELECT distinct [DBCode] as Id, 1 as Door, 0 as DocIn, 0 as Cards FROM [EX].[dbo].[DoorCounters] union all SELECT distinct [DBCode] as Id, 0 as door, 1, 0 as docin FROM [EX].[dbo].[DocumentsIn] union all SELECT distinct [DBCode] as Id, 0 as door, 0 as docin, 1 as DisCounts FROM [EX].[dbo].[DiscountCards]) group by Id |
|||
31
Vladal
10.05.12
✎
19:13
|
(27),(25) куда совать join?
SELECT DISTINCT DBCode AS Id, DBCode AS Door, NULL AS DocIn, NULL AS Cards FROM EX.dbo.DoorCounters join SELECT DISTINCT DBCode AS Id, NULL AS door, DBCode, NULL AS docin FROM EX.dbo.DocumentsIn join SELECT DISTINCT DBCode AS Id, NULL AS door, NULL AS docin, DBCode AS DisCounts FROM EX.dbo.DiscountCards Ругается на ошибку |
|||
32
Vladal
10.05.12
✎
19:13
|
(30) Я так делал, ошибка:
|
|||
33
Vladal
10.05.12
✎
19:13
|
Сообщение 8120, уровень 16, состояние 1, строка 8
Столбец "EX.dbo.DiscountCards.DBCode" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY. |
|||
34
Fragster
гуру
10.05.12
✎
19:14
|
(31) блин, сделай в 1с запрос уже в конструкторе, а потом тупо промптом переведи
|
|||
35
catena
10.05.12
✎
19:15
|
(33)Ты обманываешь
|
|||
36
Vladal
10.05.12
✎
19:15
|
(35) ну то на мой вариант. На твой пишет так:
Сообщение 156, уровень 15, состояние 1, строка 7 Неправильный синтаксис около ключевого слова "group". Могу в тимвьюере показать |
|||
37
catena
10.05.12
✎
19:16
|
(31)Делай джойн с таблицей, а не с селектом.
|
|||
38
catena
10.05.12
✎
19:16
|
(36)Поназови
|
|||
39
catena
10.05.12
✎
19:17
|
select tt.ID, max(tt.Door), max(tt.DocIn), max(tt.Cards ) from
(SELECT distinct [DBCode] as Id, 1 as Door, 0 as DocIn, 0 as Cards FROM [EX].[dbo].[DoorCounters] union all SELECT distinct [DBCode] as Id, 0 as door, 1, 0 as docin FROM [EX].[dbo].[DocumentsIn] union all SELECT distinct [DBCode] as Id, 0 as door, 0 as docin, 1 as DisCounts FROM [EX].[dbo].[DiscountCards]) as tt group by tt.Id |
|||
40
Vladal
10.05.12
✎
19:18
|
(39) Так сработало!
(38) ID 613 418 502 Сообщение в тимвьюер пошли, в ответе пароль |
|||
41
catena
10.05.12
✎
19:21
|
(40)Так заработало же уже :)
|
|||
42
Vladal
10.05.12
✎
19:21
|
(41) Спасибо, catena!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |