使sql查询获得游客的第一个id然后全部附加费

时间:2013-07-25 09:57:16

标签: .net sql

我的数据库中有这些表:

游客 - 这是第一张表

Tourist_ID - primary key
Excursion_ID - foreign key
Name...etc...

EXTRA_CHARGES

Extra_Charge_ID - primmary key 

Excursion_ID - foreign key

  Extra_Charge_Description

Tourist_Extra_Charges

Tourist_Extra_charge_ID

Extra_Charge_ID - foreign key

Tourist_ID - foreign key

预订 Reservation_ID - 主键

..... 的 Tourist_Reservations

Tourist_Reservation_ID

Reservation_ID - foreign key

Tourist_ID - foreign key

所以这是我的例子:我已经预订了Reservaton_ID - 27这个预订有两个游客,其中Tourist_ID - 86和Tourist_ID - 87这个游客ID为86,额外收费为Extra_Charge_ID - 7和Extra_charge_ID - 11;身份证87的游客额外收费,身份证号码为10;

是否可以进行sql查询以及游客的姓名和身份以及所有额外费用

输出看起来像:

Tourist_ID:86,姓名:JOHN,额外费用:7,11

(以下是我为了获得所有预订_ID = 27的游客的extra_charge_description而进行的查询)

Select EXTRA_CHARGES.Extra_Charge_Description,TOURIST_EXTRA_CHARGES.Tourist_ID FROM EXTRA_CHARGES

         INNER JOIN TOURIST_EXTRA_CHARGES on EXTRA_CHARGES.Extra_Charge_ID = TOURIST_EXTRA_CHARGES.Extra_Charge_ID

 INNER JOIN TOURIST_RESERVATION on TOURIST_EXTRA_CHARGES.Tourist_ID = TOURIST_RESERVATION.Tourist_ID
          INNER JOIN  RESERVATIONS on RESERVATIONS.Reservation_ID = TOURIST_RESERVATION.Reservation_IDhe e
          where RESERVATIONS.Reservation_ID=27

这里的问题是我有三条记录

所以,如果你认为.net中有一种方法可以获得第一个名称,然后是这个名字的所有额外费用 - 请提供建议,因为我是.net

的新手

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的架构,那么这应该是您正在寻找的;

SELECT t.Tourist_ID, t.Name, 
  STUFF((
    SELECT CAST(',' AS VARCHAR(MAX)) + CAST(tec.Extra_Charge_ID AS VARCHAR(MAX))
    FROM Tourist_Extra_Charges tec
    WHERE tec.Tourist_ID = t.Tourist_ID
    ORDER BY tec.Extra_Charge_ID
    FOR XML PATH('')
    ), 1, 1, '') AS Charges
FROM Tourist t;

An SQLfiddle to test with