0

我正在使用 SQL Server 2005。我有 3 个表

产品

PId   |   PName

服务

SId   |   SName

账单

BId   |   TypeId   |   IsService

TypeId 是 PId 或 SId。基于 IsService 字段。

如果IsService为 1,则 TypeId 为 SId,如果IsService为 0,则 TypeId 为 PId

我想用 Bill 获取 PName 和 SName,我该怎么做?

我正在考虑为此编写存储过程..并将动态列添加到存储过程中,该列根据 IsService 包含 SName 或 PName。

但是也不知道怎么写?

4

2 回答 2

2

也许是这样的:

SELECT
    Bill.*,
    CASE 
        WHEN Bill.IsService=1
        THEN Service.SName
        ELSE Product.PName
    END AS Name
FROM
    Bill
    LEFT JOIN Service
        ON Bill.TypeId=Service.SId
    LEFT JOIN Product
        ON Product.TypeId=Bill.BId
于 2012-04-23T09:46:30.287 回答
0
SELECT 
    t.BId,
    tt.Name
FROM Bill t
Outer Apply
(
    SELECT PName AS name FROM Product   WHERE 0 = t.IsService AND PId = t.TypeId
    UNION ALL
    SELECT SName AS name FROM Servicess WHERE 1 = t.IsService AND SId = t.TypeId
) tt
于 2012-04-30T09:10:41.213 回答