2015-04-14 140 views
2

TSQL Select子句我有一个让我被存储在数据库中的类型列表的基本select语句:与Case语句

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 

我需要一个case语句才能说IF source = admins also give me the type test2

这是否有意义,是否可以做一个基本的选择?

更新 我想出了这个临时解决办法,但我仍然认为这是一个更好的方式来处理这个问题:

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

仅供参考,它是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'); 

虽然正常最好引入一个可以存储这些关系的附加表格,这样整个想法就会更加丰富多彩即