av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

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

瀏覽:31日期: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 數據庫
主站蜘蛛池模板: 触手繁殖の地狱3d啪啪 | 欧美日韩精品久久久免费观看 | 永久免费看片在线播放 | 国产乱码一区二区三区 | 黄色欧美大片 | 成人国产精品一区二区 | 婷婷色综合 | 亚洲成在线 | 亚洲人成在线播放 | 91蜜桃婷婷狠狠久久综合9色 | 四虎永久在线 | 黄色一级网站 | 巨骚综合 | 天堂资源中文在线 | 欧洲精品一区二区 | 欧美日韩精品在线 | 性史性dvd影片农村毛片 | 午夜成人影视 | 免费毛片视频 | 一区二区三区日韩 | 91精品又粗又猛又爽 | 精品一区久久 | 韩国三级影院 | 成人午夜又粗又硬又大 | 成人3d动漫 | 第一福利丝瓜av导航 | 国产欧美一区二区 | 色婷婷国产精品综合在线观看 | 日韩国产在线播放 | 国产成人福利 | 日韩av免费在线播放 | 日日操日日干 | 久久久久久久久国产 | 亚洲精品在线视频观看 | 夜夜肉她怀孕h周君彦 | 99热| 亚洲亚洲人成综合网络 | 成年人视频免费看 | 久久日韩精品 | 日韩精品在线一区 | 一区二区在线看 |