1

次のデータを含む「給与」というテーブル名があります

month , pay
January , 1200
March , 1500
December , 2000

ストアド プロシージャからのクリスタル レポートで次の結果が必要です。この結果を表示する SQL クエリが必要です。

Janury , 1200
February , 000
March , 1500
April , 000
May , 000
June , 000
July , 000
August , 000
September , 000
October , 000
November , 000
December , 2000

クエリを作成するのを手伝ってください。

前もって感謝します

4

4 に答える 4

3

クエリを変更してみてください -

SELECT [month], pay = ISNULL(pay, 0) 
FROM (
    VALUES
        ('January'),
        ('February'),
        ('March'),
        ('April'),
        ('May'),
        ('June'),
        ('July'),
        ('August'),
        ('September'),
        ('October'),
        ('November'),
        ('December')
) t([month])
LEFT JOIN <your_table> ON ....
于 2013-09-06T06:31:38.720 に答える
2

SQL サーバーでは、次のように実行できます。

WITH Months AS (
              SELECT 'January' AS MonthName
    UNION ALL SELECT 'February'
    UNION ALL SELECT 'March'  
    ...
)
SELECT Months.MonthName
      ,COALESCE(Payroll.Pay, 0)
FROM Months
     LEFT JOIN Payroll
         ON Months.MonthName = Payroll.Month
于 2013-09-06T06:31:23.233 に答える
1

このようなものが必要になる場合があります。

declare @monthno int
declare @month varchar(50)

create table #month_tmp 
    ( mont varchar(20) null,number int null) 

set @monthno = 1
while @monthno < 13
begin
    SET @month=DateName(Month,cast(@monthno as varchar) + '-01-2001')

   insert into #month_tmp
    select @month, 0

    set @monthno = @monthno + 1
end

select [month],pay from payroll
union
select mont,number
from #month_tmp

drop table #month_tmp
于 2013-09-06T06:46:27.327 に答える
0

12 か月すべてを含む別のテーブルを作成できます。次に、テーブルを使用して外部結合を実行しpayrollます。

于 2013-09-06T06:15:37.590 に答える