| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> mssql >> SQL Server中多行多列連接成爲單行單列
 

SQL Server中多行多列連接成爲單行單列

2008-07-22 05:34:16  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  原始結構:

  Column1 Column2

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

  1 A

  1 B

  2 C

  2 D

  2 E

  3 F

  查詢效果:

  Column1 Column2

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

  1 A,B

  2 C,D,E

  3 F

  即將 Column1 相同的行的 Column2 連成一列。

  不知如何描述此種用法,是否具有像交叉表相關的 Cross-Table 和 Pivot 之類的約定成熟的專業稱謂?

  是否也可以稱爲另一種 Cross-Table ?

  此需求應該是常見的,網上也有許多DEMO,只是 CSDN 中頻繁有新手提問,現簡單實現一個DEMO,以便參考。

  -- 多行多列連接成爲單行單列示例:需要一個自定義函數

  -- http://community.csdn.net/Expert/TopicView3.asp?id=5603231

  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[VertToHorzSample]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

  drop table [dbo].[VertToHorzSample]

  GO

  -- 建立測試數據

  CREATE TABLE VertToHorzSample(

  Column1 int,

  Column2 varchar(100)

  )

  GO

  INSERT INTO VertToHorzSample(Column1, Column2)

  SELECT 1, 'A'

  UNION ALL

  SELECT 1, 'B'

  UNION ALL

  SELECT 2, 'C'

  UNION ALL

  SELECT 2, 'D'

  UNION ALL

  SELECT 2, 'E'

  UNION ALL

  SELECT 3, 'F'

  GO

  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ConvertVertToHorz]') and xtype in (N'FN', N'IF', N'TF'))

  drop function [dbo].[ConvertVertToHorz]

  GO

  -- 建立輔助函數

  CREATE FUNCTION ConvertVertToHorz(@Col1Val int)

  RETURNS VARCHAR(8000)

  AS

  BEGIN

  -- 實際項目中,應該考慮 @RetVal 是否會超過 8000 個字符

  DECLARE @RetVal varchar(8000)

  SET @RetVal = ''

  -- 通過遞歸 SELECT 連接指定列存儲到臨時變量中

  SELECT @RetVal = Column2 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val

  -- 連接多列

  -- SELECT @RetVal = Column2 + ',' + Column3 + ',' + Column4 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val

  -- 去掉尾巴的 , (逗號)

  IF LEN(@RetVal) > 0

  SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1)

  --PRINT @RetVal

  RETURN @RetVal

  END

  GO

  -- 測試

  SELECT Column1, dbo.ConvertVertToHorz(Column1) Column2 FROM (SELECT DISTINCT Column1 FROM VertToHorzSample) t

  /**//*

  Column1 Column2

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

  1 A,B

  2 C,D,E

  3 F

  */

  GO

  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[VertToHorzView]') and OBJECTPROPERTY(id, N'IsView') = 1)

  drop view [dbo].[VertToHorzView]

  GO

  -- 可以建立一個視圖

  CREATE VIEW dbo.VertToHorzView

  AS

  SELECT Column1, dbo.ConvertVertToHorz(Column1) Column2

  FROM (SELECT DISTINCT Column1 FROM dbo.VertToHorzSample) t

  GO

  -- 測試視圖

  SELECT * FROM VertToHorzView

  /**//*

  Column1 Column2s

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

  1 A,B

  2 C,D,E

  3 F

  */
 
 
 
上一篇《SQL Server 2000 sp4與數據鏈接池問題》
下一篇《SQL Server數據庫簡體繁體數據混用的問題》
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

 
 
 
原始結構: Column1 Column2 ----------- ---------- 1 A 1 B 2 C 2 D 2 E 3 F 查詢效果: Column1 Column2 ----------- ------------------ 1 A,B 2 C,D,E 3 F 即將 Column1 相同的行的 Column2 連成一列。 不知如何描述此種用法,是否具有像交叉表相關的 Cross-Table 和 Pivot 之類的約定成熟的專業稱謂? 是否也可以稱爲另一種 Cross-Table ? 此需求應該是常見的,網上也有許多DEMO,只是 CSDN 中頻繁有新手提問,現簡單實現一個DEMO,以便參考。 -- 多行多列連接成爲單行單列示例:需要一個自定義函數 -- [url=http://community.csdn.net/Expert/TopicView3.asp?id=5603231]http://community.csdn.net/Expert/TopicView3.asp?id=5603231[/url] if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[VertToHorzSample]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[VertToHorzSample] GO -- 建立測試數據 CREATE TABLE VertToHorzSample( Column1 int, Column2 varchar(100) ) GO INSERT INTO VertToHorzSample(Column1, Column2) SELECT 1, 'A' UNION ALL SELECT 1, 'B' UNION ALL SELECT 2, 'C' UNION ALL SELECT 2, 'D' UNION ALL SELECT 2, 'E' UNION ALL SELECT 3, 'F' GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ConvertVertToHorz]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[ConvertVertToHorz] GO -- 建立輔助函數 CREATE FUNCTION ConvertVertToHorz(@Col1Val int) RETURNS VARCHAR(8000) AS BEGIN -- 實際項目中,應該考慮 @RetVal 是否會超過 8000 個字符 DECLARE @RetVal varchar(8000) SET @RetVal = '' -- 通過遞歸 SELECT 連接指定列存儲到臨時變量中 SELECT @RetVal = Column2 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val -- 連接多列 -- SELECT @RetVal = Column2 + ',' + Column3 + ',' + Column4 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val -- 去掉尾巴的 , (逗號) IF LEN(@RetVal) > 0 SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1) --PRINT @RetVal RETURN @RetVal END GO -- 測試 SELECT Column1, dbo.ConvertVertToHorz(Column1) Column2 FROM (SELECT DISTINCT Column1 FROM VertToHorzSample) t /**//* Column1 Column2 ----------- ------------------ 1 A,B 2 C,D,E 3 F */ GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[VertToHorzView]') and OBJECTPROPERTY(id, N'IsView') = 1) drop view [dbo].[VertToHorzView] GO -- 可以建立一個視圖 CREATE VIEW dbo.VertToHorzView AS SELECT Column1, dbo.ConvertVertToHorz(Column1) Column2 FROM (SELECT DISTINCT Column1 FROM dbo.VertToHorzSample) t GO -- 測試視圖 SELECT * FROM VertToHorzView /**//* Column1 Column2s ----------- ----------------- 1 A,B 2 C,D,E 3 F */
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
成熟風韻的Meinv
甜美少女
此女子姿色過人也
愛恨情愁傷哀怨
痞子的甘南日記
疑是銀河落九天
雪域壩上四——純美色
冬日戀歌——西城楊柳弄輕柔
 
>>返回首頁<<
 熱帖排行
 
 
王朝网络微信公众号
微信扫码关注本站公众号 wangchaonetcn
 
© 2005- 王朝網路 版權所有