當前位置:首頁 » 編程語言 » sql語句查詢同一列多條數據分列
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql語句查詢同一列多條數據分列

發布時間: 2022-06-08 09:50:57

sql 將一個欄位的數據分列顯示

SQL2000不支持開窗函數row_number() ,實現這種效果可以藉助存儲過程。

CREATE PROCEDURE 存儲過程2
AS
set nocount on
/* 創建一個臨時表,利用identity 添加一個從1開始的連續標識列 */
/* x欄位我設置為變長字元串型,請更改為與原始欄位類型相同 */
create table #temp (id int identity,X varchar(50))
/* 將原始表中數據插入臨時表 */
insert into #temp(x) select colName from tableName order by colName
/* 輸出希望得到列表效果 */
/* 思路:id除4求模數根據結果將X值分別放到欄位a,b,c */
/* 用(case id%4 when 1 then id + 3 when 2 then id +2 when 3 then id +1 else id end)將每4條記錄標識為一組 */
/* 最後通過求分組最大值得辦法得到最終列表 */
select
max(case (case id%4 when 1 then 1 when 2 then 2 when 3 then 3 else 0 end) when 1 then x else null end) as a,
max(case (case id%4 when 1 then 1 when 2 then 2 when 3 then 3 else 0 end) when 2 then x else null end) as b,
max(case (case id%4 when 1 then 1 when 2 then 2 when 3 then 3 else 0 end) when 3 then x else null end) as c,
max(case (case id%4 when 1 then 1 when 2 then 2 when 3 then 3 else 0 end) when 0 then x else null end) as d
from #temp
group by (case id%4 when 1 then id + 3 when 2 then id +2 when 3 then id +1 else id end)
set nocount off

上面代碼源自下面存儲過程,相對容易理解,但是由於過程里使用多一次操作查詢(update)其效率也許會慢一些(但是本人未證實)

CREATE PROCEDURE 存儲過程1
AS
set nocount on
create table #temp (id int identity,X nvarchar(50),idd int, flag smallint)
insert into #temp(x) select colName from tableName order by colName
update #temp set flag=case id%4 when 1 then 1 when 2 then 2 when 3 then 3 else 0 end,
idd=case id%4 when 1 then id + 3 when 2 then id +2 when 3 then id +1 else id end
select
max(case flag when 1 then x else null end) as a,
max(case flag when 2 then x else null end) as b,
max(case flag when 3 then x else null end) as c,
max(case flag when 0 then x else null end) as d
from #temp group by idd
set nocount off

㈡ sql 分列多行

參考以下sql

--測試一
--'abc|efg|hij|klm'參數一:截取的字元串str
--'|'參數二:在截取的字元串str中查詢目標字元x
--1參數三:出現的位次n
--截取str中x出現n次之前的所有字元
--截取'abc|efg|hij|klm'中第一個'|'之前的所有字元abc
SELECTSUBSTRING_INDEX('abc|efg|hij|klm','|',1)
--測試二
--'abc|efg|hij|klm'參數一:截取的字元串str
--'|'參數二:在截取的字元串str中查詢目標字元x
---1參數三:當為負數時,則表示倒序的位次
--截取str後中x出現從後往前數n次之後的所有字元
--截取'abc|efg|hij|klm'中從後往前數第一個'|'之後的所有字元klm
SELECTSUBSTRING_INDEX('abc|efg|hij|klm','|',-1)

㈢ SQL語句怎樣使查詢同一表同一列多條數據分列顯示(在線等)

select編碼,名稱,sum(金額),sum(數量)from表1groupby編碼,名稱

㈣ sql查詢中,如何將某列 分成 兩列。

SELECT PAccM33g02,

CASE PAccM33g02

WHEN 0 THEN PAccM33g02 END PAccM33g02_J,

CASE PAccM33g02

WHEN 1 THEN PAccM33g02 END PAccM33g02_C

FROM PAccM3307

㈤ sql語句怎麼樣一次性查詢多個條件,並分列顯示

方法一,分別查詢出來,結果再關聯

selectfnum1,fnum2from
(selectcount(*)asfnum1from表名wherea=2andb=3)t1,
(selectcount(*)asfnum2from表名wherea=3andb=5)t2

方法二

selectsum(casewhena=2andb=3then1else0end)asfnum1,
sum(casewhena=3andb=5then1else0end)asfnum2
from表名
wherea=2andb=3
ora=3andb=5

有問題請追問

㈥ sql 如何批量分列

你參考下:

--模擬數據
create table #yourtable(ID int,Content varchar(4000))
insert into #yourtable(ID,Content)
select 1,'22|5000|3000'
union all select 2,'1|35|200|2'
union all select 3,'802|22'
union all select 4,'213|354|2002|22|500'

--實際操作SQL
declare @sql nvarchar(4000),@i int
set @i=1
while exists(select 1 from #yourtable where Content<>'')
begin
set @sql='alter table #yourtable add Data'+convert(varchar,@i)+' int'
exec(@sql)
set @sql='declare @loc int update #yourtable set @loc=charindex(''|'',Content),Data'
+convert(varchar,@i)+'=convert(int,case @loc when 0 then Content else '
+'substring(Content,1,@loc-1) end),Content=case @loc when 0 then '''' else '
+'substring(Content,@loc+1,len(Content)-@loc) end where Content<>'''''
exec(@sql)
set @i=@i+1
end
select * from #yourtable

--刪除演示數據
drop table #yourtable

--結果
ID Data1 Data2 Data3 Data4 Data5
----------- ----------- ----------- ----------- ----------- -----------
1 22 5000 3000 NULL NULL
2 1 35 200 2 NULL
3 802 22 NULL NULL NULL
4 213 354 2002 22 500

㈦ SQL根據欄位內容進行分列,sql語句怎麼寫

這種不好弄。。
--
select id,replace(col,'2015-','|2015-') from table_name;
用得到的這個結果,根據|這個分隔符重新導入一個新表,之後就好弄了

㈧ SQL語句怎樣使查詢同一表同一列多條數據分列顯示

declare @sql varchar(8000)
set @sql = 'select 編碼,名稱'
select @sql = @sql+', max(case [項目序號] when '''+cast(項目序號 as varchar)+''' then 數額 else 0 end ) AS [項目序號'+cast(項目序號 as varchar)+']'
from (select distinct 項目序號 from 表名) as a
set @sql = @sql +' from 表名 group by 編碼,名稱'
select @sql
exec (@sql)

㈨ SQL 如何分列

declare @表1 table (id int,數據 varchar(10))
insert into @表1
select 1,'a b c' union all
select 2,'c a n' union all
select 3,'s c v'

select id,數據1=parsename(replace(數據,' ','.'),3),
數據2=parsename(replace(數據,' ','.'),2),
數據3=parsename(replace(數據,' ','.'),1) from @表1
/*
id 數據1 數據2 數據3
------------------
1 a b c
2 c a n
3 s c v
*/

㈩ sql語句如何實現實現查詢多列的數據

可以,我看Id列應該是唯一的吧。根據proctID分組的時候,取max(id),然後通過此id關聯,就可以把其他列數據也查詢出來了