2015-12-03 5 views
1

объектов Таблица ресурсов: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 
+2

Dont помечать вопрос с двумя БД MySQL и SQL-сервер –

+0

Ваш второй STUFF/FOR XML PATH не собирает столбец DayName из таблицы доступности объекта. SELECT ',', CAST (availyid AS VARCHAR) должен быть SELECT ',' + имя дня – SeanR

+0

во-первых, сделать ваш понедельник установленным как первый день недели (см. Эту ссылку https://msdn.microsoft.com/en-us/library/ms181598.aspx), а затем Я бы написал оператор case в зависимости от числа, возвращаемого для вывода дня недели. – CM2K

ответ

0

я получил его на работу (:.?

ObjId|Resource|Day 
1 |RescA,RescB | Mon,Tue 

SELECT 
    v.ObjId,STUFF(
        (SELECT 
         ', ' + t2.resource 
         FROM Objresc t2 
         WHERE v.Objid=t2.Objid 
         ORDER BY t2.resource 
         FOR XML PATH(''), TYPE 
        ).value('.','varchar(max)') 
        ,1,2, '' 
      ) AS 'Resources' 
       , 
    STUFF(
    (SELECT 
     ',' + DayName 
    FROM avail m 
    INNER JOIN ObjAvail vm ON m.availid = vm.availid 
    WHERE vm.ObjId = v.Objid 
    FOR XML PATH('')), 1, 1, '' 
    ) AS 'Days' 
FROM ObjResc v 
group by v.Objid 
Смежные вопросы