0

SQLServer2005を使用しています。3つのテーブルがあります

製品

PId   |   PName

サービス

SId   |   SName

明細書

BId   |   TypeId   |   IsService

TypeIdはPIdまたはSIdです。IsServiceフィールドに基づいています。が1の

場合、TypeIdはSIdであり、 0の場合、TypeIdはPIdです。IsServiceIsService

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 に答える