|   |   | 
| 
 | "ОБЪЕДИНИТЬ ВСЕ" в запросе 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!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |