国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

瀏覽:4日期: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 數據庫
主站蜘蛛池模板: 中文字幕日韩国产 | 一级毛片一片毛 | 亚洲综合爱久久影院 | 欧美一级特黄高清免费 | 久久中文字幕免费视频 | 国产福利微拍精品一区二区 | 怡红院老首页主页入口 | 国内精品七七久久影院 | 午夜精品同性女女 | 成人久久伊人精品伊人 | 男人天堂网在线视频 | 国产高清精品毛片基地 | 99在线免费| 欧美18www | 一区二区三区在线 | 99久热在线精品视频播 | 日本 亚洲 欧美 | 免费国产成人高清视频网站 | 亚洲一区 中文字幕 久久 | 成年人网站在线观看免费 | 日韩在线视精品在亚洲 | 亚洲欧美一区二区三区四区 | 曰韩一级 | 91专区在线 | 国产男女免费视频 | 欧美日韩精品一区二区三区视频 | 亚洲欧美二区三区久本道 | 国产精选一区二区 | 天堂va欧美ⅴa亚洲va一国产 | 狠狠色狠狠综合久久 | 亚洲高清国产一区二区三区 | 欧美一区二区三区精品国产 | 免费的三级网站 | 欧美一级免费 | 精品久久久久久久久久中文字幕 | 日本红怡院在线 | 最刺激黄a大片免费观看 | 日本草草视频在线观看 | 亚洲高清一区二区三区 | 二区久久国产乱子伦免费精品 | 日本强不卡在线观看 |