none
pivot is better than max() RRS feed

  • 问题

  • i use the following code to transpose my table:

    Declare @sqlA varchar(MAX)
    Set @sqlA='select 省份' 
    Select @sqlA=@sqlA+' , max(case 收货单位when '''+ 收货单位+''' then 重量else 0 end) ['+ 收货单位+']'
    from (select distinct 收货单位from  [Sales].[dbo].[Quantity]) as a
    Set @sqlA=@sqlA+' from [Sales].[dbo].[Quantity] group by 省份'
    exec(@sqlA)

    There more guys to prefer "pivot"

    Is pivot better than "max" procedure?

    2013年11月18日 3:43

答案

  • 用max会比较好理解,但是效率要自己测试才知道,先写出max()版本的,再研究一下Pivot版本怎麽写,这样是最好的
    • 已标记为答案 Ikkyuu 2013年11月18日 5:44
    • 已编辑 Steven.桦仔 2013年11月18日 6:13 修改答案
    2013年11月18日 5:22

全部回复

  • They are different, pivot is operator while max() is function.
    2013年11月18日 4:13
  • 您好,
    這需要看您從那個角度來看。
    從您的SQL來看,很直覺就是要將一個欄位中的值轉成多個欄位來呈現!
    那我很自然的選擇會使用PIVOT!
    如果是從SQL的效能來看,您可以啟用實際執行計畫,然後使用max 的script與使用pivot的方式一起執行,
    然後看它們的成本...等等。

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年11月18日 5:15
  • 用max会比较好理解,但是效率要自己测试才知道,先写出max()版本的,再研究一下Pivot版本怎麽写,这样是最好的
    • 已标记为答案 Ikkyuu 2013年11月18日 5:44
    • 已编辑 Steven.桦仔 2013年11月18日 6:13 修改答案
    2013年11月18日 5:22
  • 我也是觉得max更容易理解一些。

    而且,我发现在pivot里,函数的嵌套,好像不支持。如果有group需求,还要先生成一个相应的临时表,然后在pivot。

    感觉很多专业人士都自然而然地使用pivot,我不知道是为什么。

    2013年11月18日 5:47
  • 他们对pivot已经很熟悉了,但是对于初学者是比较难理解
    2013年11月18日 6:13