0

列がテーブル内の別の列と一致する 1 つのテーブルからレコード数を取得しようとしてい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' の対応する予約エントリがありません。それが望ましい動作である場合は、それをより明示的にして内部結合を使用できます。

現在のクエリでは、目的の結果セットよりも多くの列が選択されています。これは私が提案するかもしれないものです:

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

テーブルに2回参加する必要がある理由がよくわかりません。

を使用するとGROUP BY、期待どおりの結果が得られます。SUMCOUNT

何かのようなもの

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