объектов Таблица ресурсов:SQL - Получение значения из другой таблицы
ObjectID|Resource
01 | Resource A
01 | Resource B
Объект Наличие таблицы:
AvailID|DayName
01 | Monday
02 | Tuesday
ObjectResourceAvailability Таблица:
ObjectID|Resource Name|Day
01 |ResourceA | 01
В идеале он должен показать
ObjectID|Resource Name|DayName
01 |ResourceA, ResourceB | Monday, Tuesday
Я также объединил столбцы с одинаковым идентификатором. Как я могу сделать конечный результат с понедельника вместо 01? Я попытался выбрать ObjAvail.DayName и изменить решение конкатенации строк, но я продолжал получать столбец недействительным в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Это решение, которое помогло мне достичь конкатенации столбцов
SELECT
t1.oid
,STUFF(
(SELECT
', ' + t2.resource
FROM objectresource t2
WHERE t1.oid=t2.oid
ORDER BY t2.resource
FOR XML PATH(''), TYPE
).value('.','varchar(max)')
,1,2, ''
) AS Resources
,STUFF(
(
SELECT
',',
CAST(availyid AS VARCHAR)
FROM objectAvail t2
WHERE t1.oid = t2.oId
FOR XML PATH('')
), 1, 1, '') as [Days]
FROM objectresource t1
GROUP BY t1.oid
Dont помечать вопрос с двумя БД MySQL и SQL-сервер –
Ваш второй STUFF/FOR XML PATH не собирает столбец DayName из таблицы доступности объекта. SELECT ',', CAST (availyid AS VARCHAR) должен быть SELECT ',' + имя дня – SeanR
во-первых, сделать ваш понедельник установленным как первый день недели (см. Эту ссылку https://msdn.microsoft.com/en-us/library/ms181598.aspx), а затем Я бы написал оператор case в зависимости от числа, возвращаемого для вывода дня недели. – CM2K