0

我正在尝试从一个表中获取列与表中另一列匹配的记录数2nd。然后我需要它选择的另一列的总值。

SELECT
  h.holiday_id,
  h.holiday_name,
  CONVERT(Money,b.total_balance) AS total_balance,
  b.booking_status_id,
  Sum(CONVERT(Money,b.total_balance)) AS total_balance,
  Count(*) AS record_count
FROM
  [arend].[aren1002].[HOLIDAY_REF] AS h,
  [arend].[aren1002].[BOOKING] AS b
LEFT JOIN
  [arend].[aren1002].[BOOKING]
ON
  h.holiday_id=booking.holiday_id
WHERE
  b.booking_status_id = '330' AND h.holiday_id = b.holiday_id
ORDER BY h.holiday_id

Table 1 HOLIDAY_REF
holiday_id | holiday_name
1 | Italy
2 | Russia
3 | Spain

Table 2 BOOKING
holiday_id | booking_status_id | total_balance
1 | 330 | 2500
3 | 330 | 1500
1 | 330 | 1750
2 | 330 | 1240
2 | 330 | 5600

Results:
Holiday_id | holiday_name | total_balance | record_count
1 | Italy | 4250 | 2
2 | Russia | 6840 | 2
3 | Spain | 1500 | 1

不确定我是否以正确的方式去做。

更新:我更新了 sql 命令以反映我必须到达的位置,我现在收到一个错误:无法绑定多部分标识符“h.holiday_id”。

4

3 回答 3

1

我会确保您将 total_balance 存储为金钱,这样您就不必在显示数据时进行转换。

即使您使用的是左连接,通过检查 booking_status_id = '330' 它将排除 Holiday_Ref 中的所有条目,而没有相应的状态为“330”的 Booking 条目。如果这是所需的行为,您可能会使其更加明确并使用内部连接。

在您当前的查询中,您选择的列多于所需的结果集中。这是我可能建议的:

select
    holiday_ref.holiday_id
   ,holiday_ref.holiday_name
   ,sum(booking.total_balance) as total_balance
   ,count(1) as record_count
from
    holiday_ref
inner join
    booking 
 on holiday_ref.holiday_id = booking.holiday_id
where
    booking.booking_status_id = '330'
group by
    holiday_ref.holiday_id
   ,holiday_ref.holiday_name
于 2013-10-06T17:53:04.117 回答
1

我真的不明白为什么需要加入一个表两次。

使用 怎么样GROUP BY,它会给出你对SUMand期望的结果COUNT

就像是

SELECT
  h.holiday_id,
  Sum(CONVERT(Money,b.total_balance)) AS total_balance,
  Count(*) AS record_count
FROM
  [arend].[aren1002].[HOLIDAY_REF] AS h,
  [arend].[aren1002].[BOOKING] AS b
WHERE
  b.booking_status_id = '330' AND h.holiday_id = b.holiday_id
GROUP BY h.holiday_id
ORDER BY h.holiday_id
于 2013-10-06T14:50:54.467 回答
0

SQL 适用于结果:

select * from HOLIDAY_REF 

给出上表

select * from BOOKING 

给出上面的另一个表

select * from HOLIDAY_REF a, BOOKING b  where a.holiday=b.holiday give a combined table

所以 - 这就是你的伎俩

select * from ( 
    select * from HOLIDAY_REF a, BOOKING b  where a.holiday=b.holiday gove a combined table
)

给出相同的结果集,但是..

你可以做类似的事情

 select *  from ( 
    select * from HOLIDAY_REF a, BOOKING b  where a.holiday=b.holiday gove a combined table
) where b.booking_status_id = '330' and a..... what ever 

每个选择都会提供新的小表可供选择

正确的语法取决于您的数据库

于 2013-10-05T20:23:53.030 回答