亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:18日期:2023-11-06 09:17:33

原始結構:

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 數據庫
主站蜘蛛池模板: 九九热8| 欧美一级做一级爱a做片性 欧美一级做一级做片性十三 | 亚洲黄色a | 国产91免费在线 | 成年人黄色小视频 | 欧美欲妇激情视频在线 | 丁香婷婷色综合 | 任你躁欧美一级在线精品免费 | 国产成人精品在视频 | 最新精品在线 | 在线视频观看免费视频18 | 日本黄色录像视频 | 三级4级全黄在线看 | 欧美一级精品高清在线观看 | 丁香五月欧美成人 | 狠狠色丁香久久婷婷综 | 国产成人精品1024在线 | 黄色视屏免费观看 | 911精品国产亚洲日本美国韩国 | 婷婷丁香综合网 | 日韩久久精品视频 | 国产精品不卡视频 | 国产亚洲精品成人一区看片 | 免费看色片网站 | 图片综合区 | 国产图片亚洲精品一区 | 九九热精品在线观看 | 欧美精品久久久久久久久大尺度 | 青青草污 | 黄色一级一级片 | 在线播放高清国语自产拍免费 | 欧美日韩成人在线观看 | 国产三级精品在线观看 | 五月天婷婷综合网 | 999yy成年在线视频免费看 | 国产精选91热在线观看 | 欧美精品二区 | 一节毛片 | 色婷婷色婷婷 | 亚洲理论片中文字幕电影 | 九九九国产在线 |