1

Group By ステートメントでサブクエリの結果を使用しようとしていますが、これが許可されていないことがわかりました。CTEでこれを行うことは可能かもしれないと思いますが、正確にはわかりません。私は SQL Server 2005 用にこの SQL コードを作成しています。私は明らかに専門家ではありません。ここに私が書いたSQL文があります...

select
  sum(paxon), 
  (select id from runs as RS where RS.code = RL.runsegment) as port_id,
  date
from
  runlogs as RL
where 
  date BETWEEN '07/09/2012' and '07/16/2012'     
  and account in ('311,312,313')
  and runsegment in (select code from runsegments where org_id = 13)
group by
  date,
  port_id

これを実行しようとすると、port_id が無効な列名であると言われます。一時テーブルまたは CTE を作成するか、場合によっては JOIN を使用することでこれが可能であると確信していますが、その方法はわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

このようなものはどうですか?何かが欠けていない限り、サブクエリの必要はないと思います。

SELECT SUM(rl.paxon)
    ,r.id AS port_id
    ,rl.[date]
FROM runlogs rl
    INNER JOIN runs r
        ON r.code = rl.runsegment
    INNER JOIN runsegments rs
        ON rs.code = rl.runsegment
WHERE rl.[date] BETWEEN '20120709' AND '20120716'  
    AND rl.account in ('311','312','313')
    AND rs.org_id = 13
GROUP BY rl.[date], r.id

account in ('311,312,313')をしようとしているのかわからない。私の答えでは、それaccountnvarcharorvarcharであり、3 つの項目のそれぞれが実際には異なるaccount値であると仮定しました。accountが の場合int、行は次のようになります AND rl.account in (311,312,313)

また、優先される区切りのない数値文字列を使用するように日付を変更しました。

于 2012-07-17T23:41:31.977 に答える
0

1つのオプションは以下です

select sum(sum_paxon), date, port_id from
(
select paxon,

(select id from runs as RS where RS.code = RL.runsegment) as port_id,

date from runlogs as RL

where

date BETWEEN '07/09/2012' and '07/16/2012'

and account in ('311,312,313')

and runsegment in (select code from runsegments where org_id = 13)
 ) Z
group by date, port_id
于 2012-07-17T23:32:10.690 に答える