0

クエリ:

SELECT aType, SUM(Earnings - Expenses) "Rev"
FROM aTable
GROUP BY aType
ORDER BY aType ASC

結果:

| aType | Rev   |
| ----- | ----- |
| A     | 20    |
| B     | 150   |
| C     | 250   |

質問: 最初のクエリ内で Sybase 構文を使用して、以下のような集計行を下部に表示することは可能ですか? それとも、完全に別のクエリにする必要がありますか?

| aType | Rev   |
| ----- | ----- |
| A     | 20    |
| B     | 150   |
| C     | 250   |
=================
| All   | 320   |

SQL から ROLLUP 関数を取得して Sybase に正常に変換することはできませんでしたが、これを行う別の方法があるかどうかはわかりません。

ありがとう!

4

3 に答える 3

1

SybaseのすべてのバージョンがROLLUPをサポートしているわけではありません。あなたはそれを昔ながらの方法で行うことができます:

with t as 
    (SELECT aType, SUM(Earnings - Expenses) "Rev"
     FROM aTable
     GROUP BY aType
    )
select t.*
from ((select aType, rev from t) union all
      (select NULL, sum(rev))
     ) t
ORDER BY (case when atype is NULL then 1 else 0 end), aType ASC

これは、厄介で力任せのアプローチです。このバージョンのSybaseがサポートしていない場合は、次の操作withを実行できます。

select t.aType, t.Rev
from ((SELECT aType, SUM(Earnings - Expenses) "Rev"
       FROM aTable
       GROUP BY aType
      ) union all
      (select NULL, sum(rev))
     ) t
ORDER BY (case when atype is NULL then 1 else 0 end), aType ASC

これは非常に基本的な標準SQLです。

于 2013-02-12T01:48:29.550 に答える
1

次のようなsybaseのcompute by句でうまくいくかもしれません:

create table #tmp1( name char(9), earning int , expense int) 
insert into #tmp1 values("A",30,20)
insert into #tmp1 values("B",50,30)
insert into #tmp1 values("C",60,30)

select name, (earning-expense) resv from #tmp1
group by name
order by name,resv
compute sum(earning-expense)

また

select name, convert(varchar(15),(earning-expense)) resv  from #tmp1
group by name
union all
SELECT "------------------","-----"
union all
select "ALL",convert(varchar(15),sum(earning-expense)) from #tmp1

ありがとう、ゴパル

于 2013-02-12T11:04:20.953 に答える