2016-07-15 1 views
0

У меня есть главная таблица, которая имеет одну строку на ключ и таблицу подробностей, которая имеет много строк на ключ с полем последовательности, которое имеет описание поле Мне нужно объединить вместе и создать одну строку на ключ. Мой код делает это отлично, но строка данных данных не содержит конкатенированных данных в правильном порядке. Данные передаются мне в электронной таблице Excel, и я использую мастер импорта для добавления данных в базу данных. Так как порядок неверен в подробных данных, я добавил дополнительный выбор для сортировки данных по ключевому и порядковому номерам, которые являются входными данными в STUFF WITH XML PATH. Я все еще получаю данные в неправильном порядке. Если я сначала сортирую данные в электронной таблице, а затем загружаю их в базу данных, он отлично работает. Мне действительно нужно, чтобы это работало динамично, так как я хочу распространять это для своей команды, и мы можем использовать его для разных таблиц. Любые идеи о том, почему суб-выбор с помощью STUFF FOR XML PATH не работает? Как я могу делать то, что мне нужно?Как получить SQL-запрос с объединением и использовать STUFF и FOR XML PATH правильно отсортированы

Вот код, у меня есть:

SELECT pic, pisc, piin 
    , STUFF((SELECT ' ' + P.PIIDTA FROM PI115AP P 
    Where P.PIC =B.PIC 
    and P.PISC = B.PISC 
    and P.PIIN = B.PIIN FOR XML PATH(''), type 
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail 
    From 
    (select TOP 100 PERCENT 
     pic, pisc, piin, piisn, piidta 
    from PI115AP 
    order by pic, pisc, piin, piisn) B 
    Group By B.PIC, B.pisc, B.piin 

Спасибо!

+0

Не могли бы вы показать, что ваш запрос дает вам в настоящее время и каков ваш ожидаемый результат. – TheGameiswar

+0

# TheGameiswar - проблема возникает, когда между последовательными строками находятся строки. Подробные данные составляют более 15 000 строк, а I и – Cass

+0

Извините #TheGameiswar - Проблема возникает только при наличии строк между последовательными строками. Например, у меня может быть 200 072 00002 1 PERM. НАЖМИТЕ; 7 НЕОБХОДИМАЯ КНОПКА e01 006 00003 1 НЕКОТОРЫЙ ТЕКСТ еще строки ... 200 072 00002 2 FRONT; ДВЕ КАРМАНТЫ, ОДИН ЛОЖЬ И Другие строки Комбинированные данные будут иметь seq 3, seq1, seq5, упорядоченные таким образом. Результат должен состоять из 1 данных, данных seq2 и т. Д. У меня ограниченное пространство для добавления комментария, поэтому я сконцентрировался на этом, я думаю, это имеет смысл. – Cass

ответ

0

У вас есть много деталей и деталей, которые могут работать так, как вам хочется. FOR FOR XML находится не в том порядке, который вам нужен, потому что подзапрос не имеет порядка. Фактический набор результатов не в том порядке, в котором вы хотите либо потому, что основной запрос не имеет порядка. Я не совсем понимаю суть подзапроса В. Верх не заказывает фактические результаты при использовании вершины, он просто определяет, какие строки извлекать.

Довольно уверен, что вы хотите чего-то большего подобного.

SELECT pic 
    , pisc 
    , piin 
    , STUFF((SELECT ' ' + P.PIIDTA 
      FROM PI115AP P 
      Where P.PIC = B.PIC 
       and P.PISC = B.PISC 
       and P.PIIN = B.PIIN 
      order by p.pic 
       , p.pisc 
       , p.piin 
       , p.piisn 
      FOR XML PATH(''), type 
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail 
From PI115AP B 
Group By B.PIC 
    , B.pisc 
    , B.piin 
order by b.pic 
    , b.pisc 
    , b.piin 
+0

#Sean Lange, Спасибо за ответ. У меня есть порядок y by by sub select. Это суб-запрос: выбрать TOP 100 ПРОЦЕНТОВ ПИК, pisc, piin, piisn, piidta из PI115AP заказа по ПОС, pisc, piin, piisn И ваш код дает мне следующее сообщение об ошибке: Msg 8127 , Уровень 16, состояние 1, строка 24 Столбец «PI115AP.PIISN» недействителен в предложении ORDER BY, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – Cass

+0

В вашем подзапросе с STUFF нет заказа. Я не могу проверить запрос, который я разместил, потому что мне не с чем работать. Я закодировал это слепое. –

+0

#Sean Lange, подзапрос в материале не может иметь порядок, потому что piisn не выбран и не может быть. Мне нужны данные, объединенные с тремя другими уровнями полей. То, что я не получаю суб-запрос (выберите TOP 100 ПРОЦЕНТОВ ПИК, pisc, piin, piisn, piidta из PI115AP заказа по ПОС, pisc, piin, piisn) возвращает данные в правильном порядке , Я, хотя это был канал для запроса STUFF, но STUFF не помещает его в правильном порядке. – Cass