當前位置:首頁 » 編程語言 » 行轉列sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

行轉列sql

發布時間: 2022-01-29 04:38:50

sql Server中一個行轉列的SQL

select 姓名 ,sum(case 科目 when '語文' then 分數 else 0 end) as 語文
,sum(case 科目 when '數學' then 分數 else 0 end) as 數學

from 表 group by 姓名

其他的照樣加進去

② sql 行轉列 這SQL改如何寫

14
SELECT
`Acc_dte`,
MAX(IF(trx_amt>0,trx_amt,null)) AS a1,
MAX(IF(trx_amt<0,abs(trx_amt),null)) AS a2
FROM tbl_data
GROUP BY `Acc_dte`

15
SELECT `table2`.`dep_nam`,
MAX(IF(`Yer_mon`='201301',`Yer_mon`,NULL)) AS '201301',
MAX(IF(`Yer_mon`='201302',`Yer_mon`,NULL)) AS '201302',
MAX(IF(`Yer_mon`='201302',`Yer_mon`,NULL)) AS '201302'
FROM `table2`
LEFT JOIN `table1` ON `table2`.`dep_nbr` =`table1`.`dep_nbr`
WHERE 1
GROUP BY `table2`.`dep_nam`

③ 行轉列,列轉行怎麼做sql

/*行轉列*/
SELECT*FROM[StudentScores]/*數據源*/ASP
PIVOT
(SUM(Score/*行轉列後列的值*/)FOR
p.Subject/*需要行轉列的列*/IN([語文],[數學],[英語],[生物]/*列的值*/)
)AST
/*列轉行*/
SELECTP.ProgrectName,P.Supplier,P.SupplyNumFROM(SELECTProgrectName,OverseaSupply,NativeSupply,
SouthSupply,NorthSupplyFROMProgrectDetail
)T
UNPIVOT
(
SupplyNumFORSupplierIN
(OverseaSupply,NativeSupply,SouthSupply,NorthSupply)
)P

④ sql語句行轉列 怎麼轉啊

--聲明變數

declare@sqlvarchar(1000),@num_dataint,@num_allvarchar(2000),@num_numint,@table_sqlvarchar(2000)

set@num_num=0

--判斷並創建表

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[records]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[records]

createtablerecords(

[id]int,

[name]varchar(50),

[sex]varchar(10),

[num]int

)

--插入數據

insertintorecordsvalues(1,'tom','男',2)

insertintorecordsvalues(1,'tom','男',3)

insertintorecordsvalues(1,'tom','男',4)

insertintorecordsvalues(1,'tom','男',5)

--全選表中數據

select*fromrecords

--全選num列數據

selectnumas'數據'fromrecords

--釋放游標

deallocateselect_num

--為『selectnumfromrecords』建立游標

declareselect_numscrollcursorforselectnumas'shuju'fromrecords

--打開游標

openselect_num

--獲得第一條數據

fetchnextfromselect_numinto@num_data

set@num_all=convert(varchar,@num_data)+','

set@num_num=@num_num+1;

--如果獲取成功,繼續獲得數據

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@num_num=@num_num+1;

set@num_all=@num_all+convert(varchar,@num_data)+','

end

--關閉游標

closeselect_num

print@num_num

--set@num_num=@num_num-1;

declare@iint

set@i=1

print@num_num

print@i

set@table_sql='createtablenumall(idint,namevarchar(50),sexvarchar(10)'

print@table_sql

while@num_num>=1

begin

set@table_sql=@table_sql+',num'+convert(varchar,@i)+'int'

set@num_num=@num_num-1;

set@i=@i+1

end

set@table_sql=@table_sql+')'

print@table_sql

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[numall]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[dbo].[numall]

exec(@table_sql)

declare@insert_sqlvarchar(2000)

set@insert_sql='insertintonumallvalues(1,'+'''tom'','+'''男'''

print@insert_sql

openselect_num

--獲得第一條數據

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

--如果獲取成功,繼續獲得數據

while@@fetch_status=0

begin

fetchnextfromselect_numinto@num_data

set@insert_sql=@insert_sql+','+convert(varchar,@num_data)

end

set@insert_sql=@insert_sql+')'

print@insert_sql

exec(@insert_sql)

--insertintonumallvalues(1,'tom','男',2,3,4,5,5)

select*fromnumall

試試吧,數據雖然有點出入,但已經說明問題了!!!

⑤ sql server 行轉列

創建測試表

createtabletest
(_keyvarchar(10),
_valuevarchar(10),
idint)

insertintotestvalues('ceshi','測試值',10)
insertintotestvalues('ceshi','測試值',11)
insertintotestvalues('ceshi2','測試值2',11)

執行

declare@sqlvarchar(4000)
set@sql='selectid'
select@sql=@sql+',max(case_keywhen'''+[_key]+'''then[_value]end)as
['+_key+']'
from(selectdistinct_keyfromtest)asa
select@sql=@sql+'fromtestgroupbyid'
exec(@sql)

結果


額,我那個第三條數據id寫錯了,不過方法還是這個

⑥ sql 行轉列

最簡答的方法:使用程序數組,例如你現在的代碼是:
do while not rs.eof
response.write rs("....")
rs.movenext
end do

那麼可以下面這樣輸出:
'先為每個欄位定義數組
dim a(1)
dim b(1)
n=1
do while not rs.eof
a(n)=rs("a")
b(n)=rs("b")
'...有多少欄位寫多少行....
n=n+1
rs.movenext
end do
'下面再輸出
response.write "<table>";
response.write "<tr><td>" & join("<td>",a)
response.write "<tr><td>" & join("<td>",b)
response.write "</table>";

你的ASP程序不可能顯示多少條,一般每頁顯示20條左右,用數組在顯示的轉換是可行的。

⑦ sql行轉列

SELECT e.NAME as name,
count(case when DATEPART(year,c.START_TIME)=2014 then 1 else null end ) as count2014,
count(case when DATEPART(year,c.START_TIME)=2015 then 1 else null end ) as count2015
from ENVI_DATA_STATISTIC_COMP c
LEFT JOIN ENVI_CITY e on e.CITY_ID=c.CITY_ID
where c.COMP_NAME like '%藍天白雲%' and INDEX_TYPE='12'
and (c.START_TIME like '%2014-08%' or c.START_TIME like '%2015-08%' ) and STATISTIC_TYPE='1' and c.VALID_FLAG='1'
group by name

應該是醬紫的,使用case when 轉換~

⑧ SQL語句行轉列

根據樓主的描述,特為樓主總結如下,在SqlServer裡面行列轉換的語法一般是: select 欄位, sum(case when 要轉換的行單元格的欄位名='行欄位內容' then 聚合的欄位名 end ) as 自定義的列標題1 from 表的名字 group by 欄位(注意,分組聚合就是根據這個欄位來的,具體到樓主的問題,這里的欄位就應該是org_id) 如果有多個列,之間用逗號隔開就可以了,最後一個參數和from之間不要用逗號。 具體到樓主的顯示效果就可以這樣寫了。代碼參考如下: Select org_id , sum(case when channel ='團險' then PREM end) As '團險保費' , sum(case when channel ='個險' then PREM end) As '個險保費 From 你的表名 Group By org_id

⑨ sql 用select語句進行行轉列

我們來看看一個小列子。有一個游戲玩家充值表(僅僅為了說明,舉的一個小例子),

CREATETABLE[Inpours]
(
[ID]INTIDENTITY(1,1),
[UserName]NVARCHAR(20),--游戲玩家
[CreateTime]DATETIME,--充值時間
[PayType]NVARCHAR(20),--充值類型
[Money]DECIMAL,--充值金額
[IsSuccess]BIT,--是否成功1表示成功,0表示失敗
CONSTRAINT[PK_Inpours_ID]PRIMARYKEY(ID)
)

INSERTINTOInpoursSELECT'張三','2010-05-01','支付寶',50,1

INSERTINTOInpoursSELECT'張三','2010-06-14','支付寶',50,1

INSERTINTOInpoursSELECT'張三','2010-06-14','手機簡訊',100,1

INSERTINTOInpoursSELECT'李四','2010-06-14','手機簡訊',100,1

INSERTINTOInpoursSELECT'李四','2010-07-14','支付寶',100,1

INSERTINTOInpoursSELECT'王五','2010-07-14','工商銀行卡',100,1

INSERTINTOInpoursSELECT'趙六','2010-07-14','建設銀行卡',100,1

下面來了一個統計數據的需求,要求按日期、支付方式來統計充值金額信息。這也是一個典型的行轉列的例子。我們可以通過下面的腳本來達到目的

SELECT
CreateTime,[支付寶],[手機簡訊],
[工商銀行卡],[建設銀行卡]
FROM
(
SELECTCONVERT(VARCHAR(10),CreateTime,120)ASCreateTime,PayType,Money
FROMInpours
)P
PIVOT(
SUM(Money)
FORPayTypeIN
([支付寶],[手機簡訊],[工商銀行卡],[建設銀行卡])
)AST
ORDERBYCreateTime

⑩ sql server行轉列

select * from (select week, totalprice from shoppingcart) pivot (sum(totalprice) for week in ('1','2', '3', '4','5','6','7'))