ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ VS МАТЕРИАЛ Функция

Я ищу эквивалентную функцию GROUP_CONCAT в SQL Server и нашел два варианта: sql-server-2005">CROSS APPLY и МАТЕРИАЛЫ. Потому что я хочу concatenate дня поля sday в таблице расписания с помощью соединения. Вот моя схема для базы данных, см. фото ниже. Так каков лучший подход к этому?

схема докторасхема расписания

Я попробовал функцию STUFF таким образом, и я получил дубликат записи:

введите здесь описание изображения


person user3093453    schedule 13.03.2014    source источник
comment
Это не STUFF, который выполняет эту работу, а FOR XML PATH('')   -  person Szymon    schedule 13.03.2014
comment
Я отредактировал свой вопрос. Я хочу, чтобы запись не дублировалась   -  person user3093453    schedule 13.03.2014
comment
Как вы хотите получить start_time и end_time без группировки? На каждого врача будет много записей.   -  person Szymon    schedule 13.03.2014
comment
Можете ли вы поделиться логикой здесь? Черт, я так насыщен   -  person user3093453    schedule 13.03.2014
comment
Вы получаете дублированные записи, потому что выполняете внутреннее соединение между врачом и расписанием. В расписании у одного из врачей 4 записи.   -  person Szymon    schedule 13.03.2014
comment
Кажется, вы сделали свою долю попыток в этом отношении, и ваш вопрос в целом кажется полезным, но вы задали его довольно лениво. Вы, вероятно, думали, что для вас проще просто сделать снимки соответствующих частей проблемы, чем вводить их в сообщение, но с результатом нам сложно работать. . (Или, может быть, это только я не использую программное обеспечение OCR каждую минуту бодрствования, чтобы чувствовать себя комфортно, применяя его к вашим иллюстрациям, чтобы извлечь фрагменты текста, которые мне понадобятся для попытки и выработки ответа для вас, и в этом случае я Прошу прощения.)   -  person Andriy M    schedule 20.03.2014
comment
возможный дубликат Моделирование функции group_concat MySQL в Microsoft SQL Server 2005 ?   -  person billinkc    schedule 21.03.2014


Ответы (2)


Нет проблем с конкатенацией значений в вашем запросе. Вы сами видите, что он возвращает результаты правильно. Также обратите внимание, что не STUFF() выполняет конкатенацию, а FOR XML PATH('').

Вы получаете дублированные записи, потому что выполняете внутреннее соединение между doctor и schedule. В расписании у одного из врачей 4 записи. В частности, проблема заключается в столбцах start_time, end_time и sstatus. Вы, вероятно, не можете группировать по ним, так как значения могут отличаться для каждого дня расписания.

Вы можете:

  • не возвращать эти столбцы в запросе,
  • или объединить эти столбцы.
person Szymon    schedule 13.03.2014

Возможно, вы захотите увидеть ниже ветку MSDN для функций Group Concat http://social.msdn.microsoft.com/Forums/sqlserver/en-US/f09d4166-2030-41fe-b86e-392fbc94db53/tsql-эквивалент-для-группыconcat-функции?forum=transactsql

Четыре записи связаны с тем, что в таблице расписания должно быть четыре записи: понедельник, вторник, среда и четверг. Проверьте внутреннее соединение, которое вы применили.

person Ankit Kumar    schedule 13.03.2014
comment
Кроме того, конкатенация в приведенном выше запросе работает нормально, проблема заключается в другом. - person Szymon; 13.03.2014
comment
Четыре записи связаны с тем, что в таблице расписания должно быть четыре записи: понедельник, вторник, среда и четверг. Проверьте внутреннее соединение, которое вы применили. - person Ankit Kumar; 13.03.2014
comment
Пожалуйста, укажите это в своем ответе. - person Szymon; 13.03.2014