Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
Здравствуйте дорогие форумчане.
Снова нужна помощь не могу уже долгое время написать запрос.
Изначально спрашивал [url=]https://www.sql.ru/forum/actualthread.aspx?tid=1016542[/url] как соединить и мне там помогли. Но вот столкнулся с запросом чуть посложнее и возникли проблемки.

Есть запрос.

 select distinct customer.customer_id, (RTRIM(dog_type.type_name) + ' ' + RTRIM(dog_vh_ish.numb) + ' ' + convert(char(10),dog_vh_ish.date,104)) as [vh ish]
 from [isp_dog].[dbo].[customer]
 left join [isp_dog].[dbo].[dog_vh_ish] on dog_vh_ish.customer_id=customer.customer_id
 left join [isp_dog].[dbo].[dog_type] on dog_type.dog_type_id=dog_vh_ish.dog_type_id

И вот результат

Картинка с другого сайта.

Здесь первый столбец - это ID, а vh ish это соединение 3 столбцов из 2 таблиц.

И вот теперь мне нужно соединить строчки с одинаковыми customer_id через запятую

Картинка с другого сайта.

вот на написал такой запрос

  select distinct (select(RTRIM (dog_type.type_name) + '  ' + RTRIM(dog_vh_ish.numb) + '  ' + convert(char(10),dog_vh_ish.date,104))
  from [isp_dog].[dbo].[customer]
  left join [isp_dog].[dbo].[dog_vh_ish] on dog_vh_ish.customer_id=customer.customer_id
  left join [isp_dog].[dbo].[dog_type] on dog_type.dog_type_id=dog_vh_ish.dog_type_id) + ',' as 'data()'
  from [isp_dog].[dbo].[dog_vh_ish] t2
  left join [isp_dog].[dbo].[customer] on customer.customer_id=t2.customer_id 
  where [isp_dog].[dbo].[customer].customer_id=t2.customer_id for XML path('')

но sql мне отвечает:
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.

Подскажите пожалуйста в чем ошибка или неточность моего написания.
Заранее спасибо. Все удачного дня.
18 апр 13, 15:46    [14199227]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
--Работает 
select top 10 name from sys.objects
--А вот в подзапрос засовывать так нельзя
select distinct (select top 10 name from sys.objects) + '!!!' from sys.objects


Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
18 апр 13, 15:54    [14199278]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
icef1ery,
;WITH cte AS (
 SELECT DISTINCT customer.customer_id,
        (
            RTRIM(dog_type.type_name) + ' ' + RTRIM(dog_vh_ish.numb) + ' ' + 
            CONVERT(CHAR(10), dog_vh_ish.date, 104)
        ) AS [vh ish]
 FROM   [isp_dog].[dbo].[customer]
        LEFT JOIN [isp_dog].[dbo].[dog_vh_ish]
             ON  dog_vh_ish.customer_id = customer.customer_id
        LEFT JOIN [isp_dog].[dbo].[dog_type]
             ON  dog_type.dog_type_id = dog_vh_ish.dog_type_id
)
SELECT
  t1.customer_id,
  RTRIM(
  	LTRIM(
  		STUFF(
  	          (SELECT ', ' + t2.[vh ish] FROM cte t2 WHERE t2.customer_id = t1.customer_id FOR XML PATH('')),
  	          1, 1, ''
  		     )
  	     )
       ) AS [vh ish]
FROM cte t1
GROUP BY t1.customer_id
18 апр 13, 16:36    [14199571]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
PaulYoung
icef1ery,
;WITH cte AS (
 SELECT DISTINCT customer.customer_id,
        (
            RTRIM(dog_type.type_name) + ' ' + RTRIM(dog_vh_ish.numb) + ' ' + 
            CONVERT(CHAR(10), dog_vh_ish.date, 104)
        ) AS [vh ish]
 FROM   [isp_dog].[dbo].[customer]
        LEFT JOIN [isp_dog].[dbo].[dog_vh_ish]
             ON  dog_vh_ish.customer_id = customer.customer_id
        LEFT JOIN [isp_dog].[dbo].[dog_type]
             ON  dog_type.dog_type_id = dog_vh_ish.dog_type_id
)
SELECT
  t1.customer_id,
  RTRIM(
  	LTRIM(
  		STUFF(
  	          (SELECT ', ' + t2.[vh ish] FROM cte t2 WHERE t2.customer_id = t1.customer_id FOR XML PATH(''),TYPE).value('.','varchar(8000)'),
  	          1, 2, ''
  		     )
  	     )
       ) AS [vh ish]
FROM cte t1
GROUP BY t1.customer_id
Поправил слегка...
18 апр 13, 16:40    [14199604]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
PaulYoung,
Сделал запрос работает. Теперь буду разбираться как и прикручивать к своей главной таблице.
Премного благодарен.
18 апр 13, 16:43    [14199625]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
Здравствуйте сегодня.
Вчера мне помогли написать запрос в склеивание строчек и он прекрасно работает но при интеграции его в конечный большой запрос у меня снова (как не печально возникли проблемы).

Вот пример моей неудачной интеграции на которую SQL мне выдает туже ошибку:
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.


;WITH cte AS (
 SELECT DISTINCT customer.customer_id,
        (
            RTRIM(dog_type.type_name) + ' ' + RTRIM(dog_vh_ish.numb) + ' ' + 
            CONVERT(CHAR(10), dog_vh_ish.date, 104)
        ) AS [vh ish]
 FROM   [isp_dog].[dbo].[customer]
        LEFT JOIN [isp_dog].[dbo].[dog_vh_ish]
             ON  dog_vh_ish.customer_id = customer.customer_id
        LEFT JOIN [isp_dog].[dbo].[dog_type]
             ON  dog_type.dog_type_id = dog_vh_ish.dog_type_id)


 select distinct customer.customer_id, contragents.contragents_id, contragents.contragents_name, 
      
      (RTRIM(contragents.city) + '     tel.' + RTRIM(contragents.phone) + '     fax.' + RTRIM(contragents.fax)) as 'adres',
      (SELECT
	 --t1.customer_id,
	   RTRIM(
  		LTRIM(
  	      STUFF(
  	            (SELECT ', ' + t2.[vh ish] FROM cte t2 WHERE t2.customer_id = t1.customer_id FOR XML PATH(''),TYPE).value('.','varchar(8000)'),
  	            1, 2, ''
  		       )
  	         )
            ) AS [vh ish]
       FROM cte t1),
      dog_type.type_name, dog_vh_ish.numb, dog_vh_ish.date, 
      dog_vh_ish.id, dog_vh_ish.dog_type_id, markacust.marka_id, test_type_cust.test_type_id, customer.comment, 
    ((select distinct(select cast((marka) as nvarchar(max)) + ',' as 'data()' 
      from [isp_dog].[dbo].[markacust] t2
	  left join [isp_dog].[dbo].[marka] on marka.marka_id=t2.marka_id
	  left join [isp_dog].[dbo].[customer] on customer.customer_id=t2.customer_id
	  where [isp_dog].[dbo].[customer].customer_id = t2.customer_id and [isp_dog].[dbo].[markacust].customer_id = t2.customer_id  for xml path('') )
	  from [isp_dog].[dbo].[markacust]
	  where [isp_dog].[dbo].[customer].customer_id=markacust.customer_id) + '  ' +
	 (select distinct(select cast((test_type) as nvarchar(max)) + ',' as 'data()' 
      from [isp_dog].[dbo].[test_type_cust] t2
      left join [isp_dog].[dbo].[test_type] on test_type.test_type_id=t2.test_type_id
      left join [isp_dog].[dbo].[customer] on customer.customer_id=t2.customer_id
      where [isp_dog].[dbo].[customer].customer_id = t2.customer_id and [isp_dog].[dbo].[test_type_cust].customer_id = t2.customer_id for xml path('') )
      from [isp_dog].[dbo].[test_type_cust]
      where [isp_dog].[dbo].[customer].customer_id=test_type_cust.customer_id) + '  '
	  + Rtrim(customer.comment)) as 'marka,test,comment', 
      customer.finplan, customer.UchPZ,
      Rtrim(customer.numbISHvp) + ' ' + convert(char(10),customer.dateISHvp,104)  as [ISHvp], customer.numbISHvp, customer.dateISHvp, 
      Rtrim(customer.numbdog) + ' ' + convert(char(10),customer.datedog,104) as [dog],  customer.numbdog, customer.datedog, 
      Rtrim(customer.numbchet) + ' ' + convert(char(10),customer.datechet,104) as [chet],  customer.numbchet, customer.datechet,
      customer.SUM,
      Rtrim(customer.numbPP) + ' ' + convert(char(10),customer.datePP,104) as [PP], customer.numbPP, customer.datePP, 
      customer.RasxodDokBug, customer.numbProtIsp, customer.StadiaOform, customer.discription  
from [isp_dog].[dbo].[customer]
left join [isp_dog].[dbo].[contragents] on contragents.contragents_id=customer.contragents_id
left join [isp_dog].[dbo].[dog_vh_ish] on dog_vh_ish.customer_id=customer.customer_id
left join [isp_dog].[dbo].[dog_type] on dog_type.dog_type_id=dog_vh_ish.dog_type_id
left join [isp_dog].[dbo].[markacust] on markacust.marka_id=customer.marka_id
left join [isp_dog].[dbo].[test_type_cust] on test_type_cust.test_type_id=customer.test_type_id
left join [isp_dog].[dbo].[marka] on marka.marka_id=customer.marka_id
left join [isp_dog].[dbo].[test_type] on test_type.test_type_id=customer.test_type_id

Вставить пытаюсь код который мне помогли написать выше за исключение строчки
 --t1.customer_id,
так как ее выводить не нужно она была в качестве примера. Если не сложно подскажите где не прав. И хочу уточнить что данный код пишется для Запроса в клиентском приложении Delphi.

Заранее спасибо.
19 апр 13, 09:10    [14201585]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
icef1ery
Вот пример моей неудачной интеграции на которую SQL мне выдает туже ошибку:
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.


т.е. смысл этой ошибки вы так и не поняли?
или вам нужно, чтоб вам пальцем показали где ошибка, а лучше за вас написали запрос?
19 апр 13, 09:24    [14201648]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
Knyazev Alexey
т.е. смысл этой ошибки вы так и не поняли?
или вам нужно, чтоб вам пальцем показали где ошибка, а лучше за вас написали запрос?


Алексей. Смысл ошибки мне понятен (он вытекает из текста ошибки). Вопрос где и почему она возникает не понятен. (так как мало опыта еще в написании запросов).
Писать за меня запрос ненужно. Я просто попросил помочь мне, указать на место где ошибка возникает. (потому что SQL просто выдает ошибку и не указывает на место (ну это и понятно потому что просто возвращается два ответа)). А именно подсказать как лучше его написать, может где я допускаю базовые ошибки в написании запроса.
Вот как то так.
19 апр 13, 09:36    [14201710]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
icef1ery,

возьмите каждый из своих подзапросов и выполните отдельно с соответствующими параметрами. Сами и увидите где у Вас будет "больше одного значения".
19 апр 13, 09:56    [14201812]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32167
icef1ery
Я просто попросил помочь мне, указать на место где ошибка возникает. (потому что SQL просто выдает ошибку и не указывает на место (ну это и понятно потому что просто возвращается два ответа)).
Мы тоже не можем указать место. Выполните все вложенные запросы, которые "когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.", и увидите.

Ну и вообще правильно не так смотреть, а по модели данных, потому что при одних параметрах подзапрос вернёт одно значение, а при других - несколько.

Т.о. нужно исправить запросы/модель данных так, что бы вложенные запросы, которые удовлетворяют условию "когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.", никогда не могли вернуть более одного значения.
19 апр 13, 10:11    [14201933]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
alexeyvg
Т.о. нужно исправить запросы/модель данных так, что бы вложенные запросы, которые удовлетворяют условию "когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.", никогда не могли вернуть более одного значения.


+1 ...
а от меня дурной совет: для начала во всех подзапросах проставте TOP 1, чтобы гарантировать, что подзапрос вернёт 1 запись
19 апр 13, 10:19    [14201983]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
PaulYoung
icef1ery,

возьмите каждый из своих подзапросов и выполните отдельно с соответствующими параметрами. Сами и увидите где у Вас будет "больше одного значения".


Сейчас просто попытался вывести только "рабочий запрос" (который мне помогли написать). С соединением в искомой таблицы:
вот SQL
;WITH cte AS (
 SELECT DISTINCT customer.customer_id,
        (
            RTRIM(dog_type.type_name) + ' ' + RTRIM(dog_vh_ish.numb) + ' ' + 
            CONVERT(CHAR(10), dog_vh_ish.date, 104)
        ) AS [vh ish]
 FROM   [isp_dog].[dbo].[customer]
        LEFT JOIN [isp_dog].[dbo].[dog_vh_ish]
             ON  dog_vh_ish.customer_id = customer.customer_id
        LEFT JOIN [isp_dog].[dbo].[dog_type]
             ON  dog_type.dog_type_id = dog_vh_ish.dog_type_id)

select (SELECT
	 --t1.customer_id,
	   RTRIM(
  		LTRIM(
  	      STUFF(
  	            (SELECT ', ' + t2.[vh ish] FROM cte t2 WHERE t2.customer_id = t1.customer_id FOR XML PATH(''),TYPE).value('.','varchar(8000)'),
  	            1, 2, ''
  		       )
  	         )
            ) AS [vh ish]
       FROM cte t1
       GROUP BY t1.customer_id
       )      
from [isp_dog].[dbo].[customer]
left join [isp_dog].[dbo].[dog_vh_ish] on dog_vh_ish.customer_id=customer.customer_id


то есть просто вывести рабочий запрос через другую таблицу все равно пишет
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.

Хотя запрос
;WITH cte AS (
 SELECT DISTINCT customer.customer_id,
        (
            RTRIM(dog_type.type_name) + ' ' + RTRIM(dog_vh_ish.numb) + ' ' + 
            CONVERT(CHAR(10), dog_vh_ish.date, 104)
        ) AS [vh ish]
 FROM   [isp_dog].[dbo].[customer]
        LEFT JOIN [isp_dog].[dbo].[dog_vh_ish]
             ON  dog_vh_ish.customer_id = customer.customer_id
        LEFT JOIN [isp_dog].[dbo].[dog_type]
             ON  dog_type.dog_type_id = dog_vh_ish.dog_type_id
)
SELECT
  --t1.customer_id,
  RTRIM(
  	LTRIM(
  		STUFF(
  	          (SELECT ', ' + t2.[vh ish] FROM cte t2 WHERE t2.customer_id = t1.customer_id FOR XML PATH(''),TYPE).value('.','varchar(8000)'),
  	          1, 2, ''
  		     )
  	     )
       ) AS [vh ish]
FROM cte t1
GROUP BY t1.customer_id

работает на Ура.
19 апр 13, 10:56    [14202238]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
icef1ery,

зачем Вам SELECT поверх работающего SELECT'а? Какие ещё данные в результирующем наборе Вам нужны?
19 апр 13, 11:04    [14202279]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
icef1ery,

у меня как то так получилось

with src as
(
select distinct
	customer.customer_id,
	(
		RTRIM(dog_type.type_name) + ' ' +
		RTRIM(dog_vh_ish.numb) + ' ' +
		convert(char(10),dog_vh_ish.date,104)
	) as [vh ish]
from [isp_dog].[dbo].[customer]
left join [isp_dog].[dbo].[dog_vh_ish]
	on dog_vh_ish.customer_id=customer.customer_id
left join [isp_dog].[dbo].[dog_type]
	on dog_type.dog_type_id=dog_vh_ish.dog_type_id
)
, cust as
(
	select distinct customer_id
	from src
)
select
	cust.customer_id,
	reverse(stuff(reverse(
	(
		select [vh ish]+',' as 'data()'
		from src
		where src.customer_id = cust.customer_id
		order by src.[vh ish]
		for xml path('')
	)
	)1,3,'')) as [vh ish]
from cust
19 апр 13, 11:05    [14202286]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
Алексей Куренков
icef1ery,

у меня как то так получилось



Да если добавить запятую перед "1" (на правах поправки, а не троллинга),то запрос работает идеально из таблицы customer. Но вот как к этому запросу прикрутить весь остальной текст вывода нужных столбцов ума не приложу.
19 апр 13, 11:32    [14202461]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
PaulYoung
icef1ery,

зачем Вам SELECT поверх работающего SELECT'а? Какие ещё данные в результирующем наборе Вам нужны?


Мне нужно вывести одним запросом очень много полей. (если такое возможно) из нескольких таблиц
[простые поля которые можно соединить (из разных таблиц)] + [поля со склейкой строчек и столбцов] + [поля с склейкой только строчек]

Примерно так
Картинка с другого сайта.

только в столбце vh ish должно получится склейка по одинаковым customer_id (на рисунке склейки нет(в итоге должно быть 3строчки))
19 апр 13, 13:49    [14203707]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
icef1ery,

вот и напишите такой запрос без поля-перечисления, а потом вставьте поле-перечисление как, например, подзапрос в полученном SELECT'е
19 апр 13, 14:05    [14203850]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
icef1ery,

не знаю, поняли Вы или нет, но идея такая:

1. Запрос без поля-перечисления:
SELECT
....
FROM ....
....

2. Запрос с полем-перечислением на базе п.1.:
SELECT
....,
(
SELECT .... FOR XML PATH('')...
) as [vh ish]
FROM ....
....
19 апр 13, 14:09    [14203883]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
PaulYoung
icef1ery,

не знаю, поняли Вы или нет, но идея такая:

1. Запрос без поля-перечисления:
SELECT
....
FROM ....
....

2. Запрос с полем-перечислением на базе п.1.:
SELECT
....,
(
SELECT .... FOR XML PATH('')...
) as [vh ish]
FROM ....
....
смысл понял с реализацией туго но буду старатся
19 апр 13, 15:06    [14204415]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
Блин ничего не получается. Бред какой то. Сори за рейдж.
19 апр 13, 15:25    [14204576]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
icef1ery,

давай сюда свой запрос п. 1.
19 апр 13, 15:29    [14204622]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
PaulYoung
icef1ery,

давай сюда свой запрос п. 1.



вот основной запрос
select distinct customer.customer_id, contragents.contragents_id, contragents.contragents_name,       
      (RTRIM(contragents.city) + '     tel.' + RTRIM(contragents.phone) + '     fax.' + RTRIM(contragents.fax)) as 'adres',
       dog_vh_ish.id, dog_vh_ish.dog_type_id, markacust.marka_id, test_type_cust.test_type_id, customer.comment, 
    ((select distinct(select cast((marka) as nvarchar(max)) + ',' as 'data()' 
      from [isp_dog].[dbo].[markacust] t2
	  left join [isp_dog].[dbo].[marka] on marka.marka_id=t2.marka_id
	  left join [isp_dog].[dbo].[customer] on customer.customer_id=t2.customer_id
	  where [isp_dog].[dbo].[customer].customer_id = t2.customer_id and [isp_dog].[dbo].[markacust].customer_id = t2.customer_id  for xml path('') )
	  from [isp_dog].[dbo].[markacust]
	  where [isp_dog].[dbo].[customer].customer_id=markacust.customer_id) + '  ' +
	 (select distinct(select cast((test_type) as nvarchar(max)) + ',' as 'data()' 
      from [isp_dog].[dbo].[test_type_cust] t2
      left join [isp_dog].[dbo].[test_type] on test_type.test_type_id=t2.test_type_id
      left join [isp_dog].[dbo].[customer] on customer.customer_id=t2.customer_id
      where [isp_dog].[dbo].[customer].customer_id = t2.customer_id and [isp_dog].[dbo].[test_type_cust].customer_id = t2.customer_id for xml path('') )
      from [isp_dog].[dbo].[test_type_cust]
      where [isp_dog].[dbo].[customer].customer_id=test_type_cust.customer_id) + '  '
	  + Rtrim(customer.comment)) as 'marka,test,comment', 
      customer.finplan, customer.UchPZ,
      Rtrim(customer.numbISHvp) + ' ' + convert(char(10),customer.dateISHvp,104)  as [ISHvp], customer.numbISHvp, customer.dateISHvp, 
      Rtrim(customer.numbdog) + ' ' + convert(char(10),customer.datedog,104) as [dog],  customer.numbdog, customer.datedog, 
      Rtrim(customer.numbchet) + ' ' + convert(char(10),customer.datechet,104) as [chet],  customer.numbchet, customer.datechet,
      customer.SUM,
      Rtrim(customer.numbPP) + ' ' + convert(char(10),customer.datePP,104) as [PP], customer.numbPP, customer.datePP, 
      customer.RasxodDokBug, customer.numbProtIsp, customer.StadiaOform, customer.discription  
from [isp_dog].[dbo].[customer]
left join [isp_dog].[dbo].[contragents] on contragents.contragents_id=customer.contragents_id
left join [isp_dog].[dbo].[dog_vh_ish] on dog_vh_ish.customer_id=customer.customer_id
left join [isp_dog].[dbo].[dog_type] on dog_type.dog_type_id=dog_vh_ish.dog_type_id
left join [isp_dog].[dbo].[markacust] on markacust.marka_id=customer.marka_id
left join [isp_dog].[dbo].[test_type_cust] on test_type_cust.test_type_id=customer.test_type_id
left join [isp_dog].[dbo].[marka] on marka.marka_id=customer.marka_id
left join [isp_dog].[dbo].[test_type] on test_type.test_type_id=customer.test_type_id


И вот второй запрос с которым надо соединить (как мне кажется)


with src as
(
select distinct
	customer.customer_id,
	(
		RTRIM(dog_type.type_name) + ' ' +
		RTRIM(dog_vh_ish.numb) + ' ' +
		convert(char(10),dog_vh_ish.date,104)
	) as [vh ish]
from [isp_dog].[dbo].[customer]
left join [isp_dog].[dbo].[dog_vh_ish]
	on dog_vh_ish.customer_id=customer.customer_id
left join [isp_dog].[dbo].[dog_type]
	on dog_type.dog_type_id=dog_vh_ish.dog_type_id
)
, cust as
(
	select distinct customer_id
	from src
)
select
	cust.customer_id,
	reverse(stuff(reverse(
	(
		select [vh ish]+',' as 'data()'
		from src
		where src.customer_id = cust.customer_id
		order by src.[vh ish]
		for xml path('')
	)
	),1,3,'')) as [vh ish]
from cust
19 апр 13, 15:37    [14204705]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
icef1ery,

основной запрос засунуть под WITH второго без подзапросов FOR XML PATH(''), которые АККУРАТНО вставить в последний SELECT. Пожалуйста, сам, ОК?
19 апр 13, 15:53    [14204859]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
icef1ery
Member

Откуда:
Сообщений: 61
PaulYoung
icef1ery,

основной запрос засунуть под WITH второго без подзапросов FOR XML PATH(''), которые АККУРАТНО вставить в последний SELECT. Пожалуйста, сам, ОК?


Спасибо попробую в понедельник постараюсь сам. Если уж совсем туго будет спрошу еще раз. Ну уж не обессудьте. Всем спасибо.
19 апр 13, 15:56    [14204882]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в написании запроса с соединением строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32167
icef1ery
то есть просто вывести рабочий запрос через другую таблицу все равно пишет
Вы свой "рабочий запрос" хотите использовать как скалярную величину, естественно, иногда будет происходить ошибка.
19 апр 13, 15:56    [14204884]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить