2015-04-14 4 views
2

У меня есть основной оператор выбора, который должен получить мне список типов, которые хранятся в базе данных:TSQL Выберите пункт с сазом

SELECT teType 
FROM BS_TrainingEvent_Types 
WHERE source = @source 
FOR XML PATH ('options'), TYPE, ELEMENTS, ROOT ('types') 

Моей таблица содержит столбец типа и столбец источника.

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

**Table Data** 

type | source 
test  users 
test2  members 
test3  admins 

мне нужен случай заявление, чтобы быть в состоянии сказать IF source = admins also give me the type test2.

Это имеет смысл и возможно ли это сделать с помощью базового выбора?

Update Я придумал этот темп решения, но я до сих пор считаю, что это лучший способ справиться с этим .:

DECLARE @tmp AS TABLE (
QID VARCHAR (10)); 

INSERT INTO @tmp (QID) 
SELECT DISTINCT qid 
FROM tfs_adhocpermissions; 

SELECT t.QID, 
     emp.FirstName, 
     emp.LastName, 
     emp.NTID, 
     (SELECT accessKey 
     FROM TFS_AdhocPermissions AS p 
     WHERE p.QID = t.QID 
     FOR XML PATH ('key'), TYPE, ELEMENTS, ROOT ('keys')) 
FROM @tmp AS t 
     LEFT OUTER JOIN 
     dbo.EmployeeTable AS emp 
     ON t.QID = emp.QID 
FOR XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root'); 
+0

FYI, это выражение CASE *, а не оператор CASE *. –

ответ

0

попробовать этот

-------------------------------------------------------------------------------- 
-------------------------------------------------------------------------------- 
--create temp table for testing 
IF OBJECT_ID('Tempdb..#BS_TrainingEvent_Types') IS NOT NULL 
    DROP TABLE #BS_TrainingEvent_Types 
SELECT [type] , 
     [source] 
INTO #BS_TrainingEvent_Types 
FROM (VALUES ('test', 'users'), ('test2', 'members'), 
     ('test3', 'admins')) t ([type], [source]) 
-------------------------------------------------------------------------------- 
-------------------------------------------------------------------------------- 
--final query 
DECLARE @Source VARCHAR(10) = 'users' 

IF @Source = 'admins' 
    BEGIN 
     SELECT [Type] 
     FROM #BS_TrainingEvent_Types 
     WHERE source = @source 
       OR [type] = 'test2' 
     FOR  XML PATH('options') , 
        TYPE , 
        ELEMENTS , 
        ROOT('types') 
    END 
ELSE 
    BEGIN 
     SELECT [Type] 
     FROM #BS_TrainingEvent_Types 
     WHERE source = @source 
     FOR  XML PATH('options') , 
        TYPE , 
        ELEMENTS , 
        ROOT('types') 

    END 
0
select sq.teType 
from (
    SELECT t.teType 
    FROM BS_TrainingEvent_Types t 
    WHERE t.source = @source 
    union all 
    SELECT t.teType 
    FROM BS_TrainingEvent_Types t 
    WHERE @source = 'admins' and t.source = 'members' 
) sq 
FOR XML PATH ('options'), TYPE, ELEMENTS, ROOT ('types'); 

Хотя обычно было бы лучше ввести дополнительную таблицу, которая сохранит эти отношения, так что вся идея будет более расширяемой е.

Смежные вопросы