一道面試題

2021-05-24 11:44:03 字數 3333 閱讀 5390

有一張表兩個字段:

_date

,_num,

現在要產生如下的**,請設計相關sql語句。

年份 1月

2月 3月 4

月 5月

6月 7月 8

月 9月

10月

11月 12

月 2010 數量

數量 數量

數量 數量

數量 數量

數量 數量

數量 數量

數量2011 數量

數量 數量

數量 數量

數量 數量

數量 數量

數量 數量

數量 ……

sql code

--建立測試表

create

table

test(

_date

datetime

,_num

int)

--插入測試資料

insert

dbo.

test

select

'2010-01-01'

,100 union

allselect

'2010-02-01'

,100 union

allselect

'2010-03-01'

,100 union

allselect

'2010-04-01'

,200 union

allselect

'2010-05-01'

,300 union

allselect

'2010-06-01'

,400 

select

*from

dbo.

test

--建立臨時表

create

table

#table(

_year

int,

_month

int,

_num

int)

--為臨時表插入資料

insert

#table

select

year(t.

[_date]

),month(t.

[_date]

),sum(t

._num)

from

dbo.

test

tgroup

byyear(t.

[_date]

),month(t.

[_date])

--查詢結果如下

selectt.

[_year]'年份

',sum

(caset.

[_month]

when 1 thent.

[_num]

else 0 end)as

'1月',

sum(caset.

[_month]

when 2 thent.

[_num]

else 0 end)as

'2月',

sum(caset.

[_month]

when 3 thent.

[_num]

else 0 end)as

'3月',

sum(caset.

[_month]

when 4 thent.

[_num]

else 0 end)as

'4月',

sum(caset.

[_month]

when 5 thent.

[_num]

else 0 end)as

'5月',

sum(caset.

[_month]

when 6 thent.

[_num]

else 0 end)as

'6月',

sum(caset.

[_month]

when 7 thent.

[_num]

else 0 end)as

'7月',

sum(caset.

[_month]

when 8 thent.

[_num]

else 0 end)as

'8月',

sum(caset.

[_month]

when 9 thent.

[_num]

else 0 end)as

'9月',

sum(caset.

[_month]

when 10 thent.

[_num]

else 0 end)as

'10月',

sum(caset.

[_month]

when 11 thent.

[_num]

else 0 end)as

'11月',

sum(caset.

[_month]

when 12 thent.

[_num]

else 0 end)as

'12月'

from

#table

tgroupbyt

.[_year]

--刪除臨時表

drop

table

#table

經過研究,其實可以更簡單,採用資料透視方法。

code如下:

declare

@sql

varchar

(max

)set

@sql

='select year(_date) [

年份]'

select

@sql

=@sql

+',sum(case month(_date) when '''

+ltrim

(_date)+

''' then _num else 0 end) ['

+ltrim

(_date)+

'月]'

from

(select

month

(_date

)_date

from

dbo.

test

group

bymonth

(_date))t

select

@sql

=@sql

+' from test group by year(_date)'

exec

(@sql)

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...

一道面試題

如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...