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

sql橫向連接

發布時間: 2022-05-07 02:11:38

A. sql怎麼樣合並兩個查詢結果 橫向顯示出來

select a.d_roomid,a.d_type,b.d_roomid,b.d_personname from
ROOMPRICE a
left join REGISTER b on b.D_EXCHANGE='否' and b.D_STATE='未結帳'
and a.D_ROOMID=b.D_ROOMID

B. sql查詢結果橫向顯示

簡單啊,先用row_number 獲取 No順序,然後通過STUFF FOR XML PATH 獲取順序號轉成欄位

通過動態SQL利用PIVOT行列

C. sql中怎麼讓結果集橫向顯示

給你一個最長見的例子:普通行列轉換
問題:假設有張學生成績表(tb)如下:
姓名 課程 分數
張三 語文 74
張三 數學 83
張三 物理 93
李四 語文 74
李四 數學 84
李四 物理 94
想變成(得到如下結果):
姓名 語文 數學 物理
---- ---- ---- ----
李四 74 84 94
張三 74 83 93
-------------------
*/

create table tb(姓名 varchar(10) , 課程 varchar(10) , 分數 int)
insert into tb values('張三' , '語文' , 74)
insert into tb values('張三' , '數學' , 83)
insert into tb values('張三' , '物理' , 93)
insert into tb values('李四' , '語文' , 74)
insert into tb values('李四' , '數學' , 84)
insert into tb values('李四' , '物理' , 94)
go

--SQL SERVER 2000 靜態SQL,指課程只有語文、數學、物理這三門課程。(以下同)
select 姓名 as 姓名 ,
max(case 課程 when '語文' then 分數 else 0 end) 語文,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理
from tb
group by 姓名

--SQL SERVER 2000 動態SQL,指課程不止語文、數學、物理這三門課程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)

--SQL SERVER 2005 靜態SQL。
select * from (select * from tb) a pivot (max(分數) for 課程 in (語文,數學,物理)) b

--SQL SERVER 2005 動態SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 課程 from tb group by 課程
exec ('select * from (select * from tb) a pivot (max(分數) for 課程 in (' + @sql + ')) b')

---------------------------------

/*
問題:在上述結果的基礎上加平均分,總分,得到如下結果:
姓名 語文 數學 物理 平均分 總分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
張三 74 83 93 83.33 250
*/

--SQL SERVER 2000 靜態SQL。
select 姓名 姓名,
max(case 課程 when '語文' then 分數 else 0 end) 語文,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理,
cast(avg(分數*1.0) as decimal(18,2)) 平均分,
sum(分數) 總分
from tb
group by 姓名

--SQL SERVER 2000 動態SQL。
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' , cast(avg(分數*1.0) as decimal(18,2)) 平均分 , sum(分數) 總分 from tb group by 姓名'
exec(@sql)

--SQL SERVER 2005 靜態SQL。
select m.* , n.平均分 , n.總分 from
(select * from (select * from tb) a pivot (max(分數) for 課程 in (語文,數學,物理)) b) m,
(select 姓名 , cast(avg(分數*1.0) as decimal(18,2)) 平均分 , sum(分數) 總分 from tb group by 姓名) n
where m.姓名 = n.姓名

--SQL SERVER 2005 動態SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 課程 from tb group by 課程
exec ('select m.* , n.平均分 , n.總分 from
(select * from (select * from tb) a pivot (max(分數) for 課程 in (' + @sql + ')) b) m ,
(select 姓名 , cast(avg(分數*1.0) as decimal(18,2)) 平均分 , sum(分數) 總分 from tb group by 姓名) n
where m.姓名 = n.姓名')

drop table tb

------------------
------------------

/*
問題:如果上述兩表互相換一下:即表結構和數據為:
姓名 語文 數學 物理
張三 748393
李四 748494
想變成(得到如下結果):
姓名 課程 分數
---- ---- ----
李四 語文 74
李四 數學 84
李四 物理 94
張三 語文 74
張三 數學 83
張三 物理 93
--------------
*/

create table tb(姓名 varchar(10) , 語文 int , 數學 int , 物理 int)
insert into tb values('張三',74,83,93)
insert into tb values('李四',74,84,94)
go

--SQL SERVER 2000 靜態SQL。
select * from
(
select 姓名 , 課程 = '語文' , 分數 = 語文 from tb
union all
select 姓名 , 課程 = '數學' , 分數 = 數學 from tb
union all
select 姓名 , 課程 = '物理' , 分數 = 物理 from tb
) t
order by 姓名 , case 課程 when '語文' then 1 when '數學' then 2 when '物理' then 3 end

--SQL SERVER 2000 動態SQL。
--調用系統表動態生態。
declare @sql varchar(8000)
select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [課程] = ' + quotename(Name , '''') + ' , [分數] = ' + quotename(Name) + ' from tb'
from syscolumns
where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名為姓名的其它列
order by colid asc
exec(@sql + ' order by 姓名 ')

--SQL SERVER 2005 動態SQL。
select 姓名 , 課程 , 分數 from tb unpivot (分數 for 課程 in([語文] , [數學] , [物理])) t

--SQL SERVER 2005 動態SQL,同SQL SERVER 2000 動態SQL。

--------------------
/*
問題:在上述的結果上加個平均分,總分,得到如下結果:
姓名 課程 分數
---- ------ ------
李四 語文 74.00
李四 數學 84.00
李四 物理 94.00
李四 平均分 84.00
李四 總分 252.00
張三 語文 74.00
張三 數學 83.00
張三 物理 93.00
張三 平均分 83.33
張三 總分 250.00
------------------
*/

select * from
(
select 姓名 as 姓名 , 課程 = '語文' , 分數 = 語文 from tb
union all
select 姓名 as 姓名 , 課程 = '數學' , 分數 = 數學 from tb
union all
select 姓名 as 姓名 , 課程 = '物理' , 分數 = 物理 from tb
union all
select 姓名 as 姓名 , 課程 = '平均分' , 分數 = cast((語文 + 數學 + 物理)*1.0/3 as decimal(18,2)) from tb
union all
select 姓名 as 姓名 , 課程 = '總分' , 分數 = 語文 + 數學 + 物理 from tb
) t
order by 姓名 , case 課程 when '語文' then 1 when '數學' then 2 when '物理' then 3 when '平均分' then 4 when '總分' then 5 end

drop table tb

D. MS SQL 如何將對同一個表的2個查詢結果按條件橫向連接起來

可以的,看起來語句比較復雜,如果覺得煩也可以用臨時表:
SELECT * FROM
(SELECT A,B,C FORM TABLE1 WHERE A='TEST1' ) AS A,
(SELECT A,B,C FORM TABLE1 WHERE B='TEST2' ) AS B
WHERE A.C=B.C

E. sql 橫向連接的問題

union --會合並結果集相同的項,只顯示一次.會改為顯示順序
union all --不會合並不改變顯示順序

-----------問題1要根據表的結構而定
select
數量,
sum(應收價款) as 應收價款

from table group by ID--固定列的顯示項

F. 如何把兩個sql語句結果 橫向合並起來

select table1 .field1, table2. field2 from table1
full join table2 on 1=1

G. 請問Sql server如何把一個內連接的輸出的表格橫向顯示

普通sql很難做,要用sqlserver存儲過程,用游標循環shorename的表,然後用case when一個一個拼起來

比如游標里寫
create table aa as select osid,osuser,ostime,sum(case when shopname=@shopname and then osnumber else 0 end) as @shopname
from aa, shopname where aa.osid=shopname.osid

這樣表aa在循環中每次都加上一個新shopname欄位,直到游標shopname循環完畢,思路就是這樣,最後再寫個delete語句,把aa表裡osnumber=0刪掉就可以了,因為它都是表連接時由於shopname不匹配產生的垃圾數據

H. 怎樣用sql把一個數據集縱向截成三段然後橫向連接

這個數據集是我用別的方法做的

data means_2 (drop=Group);

merge means_1 (where=(group="A") rename=(age=GroupA))

means_1 (where=(group="B") rename=(age=GroupB))

means_1 (where=(group="C") rename=(age=Total)) ;

run ;
復制代碼
自己編了一個sql的版本,第一個數據集是means—1

proc sql ;

create table work.means_2 as

select means_1.*

from work.means_1 (where=(group="A"))

full join work.means_1 (where=(group="B"))

on means_1._STAT_=means

I. orical SQL 怎麼實現兩個表橫向連接在一起

SELECT DISTINCT * FROM (SELECT 表1.名稱,表1.葯品數量,表1.葯品總額,表2.配葯師人數,表2.配葯量 FROM (表1 LEFT JOIN 表2 ON (表1.名稱 = 表2.名稱)) UNION ALL SELECT 表1.名稱,表1.葯品數量,表1.葯品總額,表2.配葯師人數,表2.配葯量 FROM (表1 RIGHT JOIN 表2 ON (表1.名稱 = 表2.名稱)))
有好幾種寫法,這只是其中的一種

J. SQL橫向+縱向合並

沒有表結構,不清楚寫的對不對,用了sum()over(),這是Oracle的用法,其他資料庫能不能用就不清楚了,以下是代碼

selectrownumas序號,a.*
from(selectdistincta.名稱as醫囑名稱,
zlspellcode(a.名稱)as簡碼,
e.類別,
b.檢查部位,
b.檢查方法,
c.名稱as收費名稱,
c.標識主碼,
b.收費數量as數量,
d.現價as價格,
c.站點,
dECOdE(A.撤檔時間,
to_date('3000-01-01','YYYY-MM-dd'),
NULL,
null,
null,
'√')AS是否停用,
sum(b.收費數量*d.現價)over()as價格
from診療項目目錄a,
診療收費關系b,
收費項目目錄c,
收費價目d,
收費類別e
wherea.Id=b.診療項目Id
ANdb.收費項目Id=c.id
andc.Id=d.收費細目Id
anda.類別=e.編碼
anda.撤檔時間=to_date('3000-01-01','yyyy-mm-dd')
andd.終止日期=to_date('3000-01-01','yyyy-mm-dd')
anda.類別[0]
anda.服務對象=[1]
---orderbya.名稱
)a
wherea.是否停用isnull
orderby序號