1

私は自分の苦境に対するよりエレガントな (おそらくより速い) 解決策を探しています。

通話トラフィック テーブルに関するレポートを作成する次のクエリがあります。

SELECT 'Tariff1' as [Tariff], Count([Number]) as [Number of calls]  ,sum(convert(bigint,[Seconds]))/60 as [Minutes], sum([CustomerCost]) as [Customer Cost], sum([WholesaleCost]) as [WholesaleCost]
  FROM [MarchCalls]
 where [AccNo] in (select [accno] from [Tariffs] where [Tariff] = 'Tariff1')

union

SELECT 'Tariff2' as [Tariff], Count([Number]) as [Number of calls]  ,sum(convert(bigint,[Seconds]))/60 as [Minutes], sum([CustomerCost]) as [Customer Cost], sum([WholesaleCost]) as [WholesaleCost]
  FROM [MarchCalls]
 where [AccNo] in (select [accno] from [Tariffs] where [Tariff] = 'Tariff2')

union
SELECT 'Tariff3' as [Tariff], Count([Number]) as [Number of calls]  ,sum(convert(bigint,[Seconds]))/60 as [Minutes], sum([CustomerCost]) as [Customer Cost], sum([WholesaleCost]) as [WholesaleCost]
  FROM [MarchCalls]
 where [AccNo] in (select [accno] from [Tariffs] where [Tariff] = 'Tariff3')

 union

SELECT 'Total' as [Tariff], Count([Number]) as [Number of calls]  ,sum(convert(bigint,[Seconds]))/60 as [Minutes], sum([CustomerCost]) as [Customer Cost], sum([WholesaleCost]) as [WholesaleCost]
  FROM [MarchCalls]

いくつかのポイント: Convert(bigint) は、レコードの量とその中の数値のために必要です 返されるレコードセットは、この形式のままでなければなりません このデータ (およびデータベース) は、厳密に読み取り専用 SQL Server 2012 です

このクエリは毎月末に時間がかかり、時間を短縮する必要があります

これを合理化するのを手伝ってくれる人はいますか?

4

1 に答える 1

4

IN を使用する代わりに、AccNo フィールドで結合できますか。

SELECT 
    T.[Tariff], 
    Count([Number]) as [Number of calls] ,
    sum(convert(bigint, [Seconds]))/60 as [Minutes], 
    sum([CustomerCost]) as [Customer Cost], 
    sum([WholesaleCost]) as     [WholesaleCost]
FROM [MarchCalls] M
inner join [Tarrifs] T on M.AccNo=T.Accno and  [Tariff] in ('Tariff1','Tariff2', 'Tariff3')
group by [Tariff] with ROLLUP
于 2013-03-28T15:00:39.400 に答える