久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

原始結(jié)構(gòu):

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 連成一列。

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

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

此需求應(yīng)該是常見的,網(wǎng)上也有許多DEMO,只是 CSDN 中頻繁有新手提問,現(xiàn)簡單實(shí)現(xiàn)一個(gè)DEMO,以便參考。

-- 多行多列連接成為單行單列示例:需要一個(gè)自定義函數(shù)

-- 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

-- 建立測試數(shù)據(jù)

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

-- 建立輔助函數(shù)

CREATE FUNCTION ConvertVertToHorz(@Col1Val int)

RETURNS VARCHAR(8000)

AS

BEGIN

-- 實(shí)際項(xiàng)目中,應(yīng)該考慮 @RetVal 是否會超過 8000 個(gè)字符

DECLARE @RetVal varchar(8000)

SET @RetVal = ''

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

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

-- 可以建立一個(gè)視圖

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

*/

標(biāo)簽: Sql Server 數(shù)據(jù)庫
主站蜘蛛池模板: 旬阳县| 自贡市| 舟曲县| 武隆县| 合江县| 金坛市| 开化县| 桐乡市| 沙湾县| 高台县| 苍南县| 阜平县| 丰顺县| 枣强县| 西平县| 长子县| 沭阳县| 天峻县| 故城县| 浙江省| 建瓯市| 宣恩县| 巨野县| 焦作市| 改则县| 兴宁市| 越西县| 仁怀市| 凤山市| 郧西县| 依安县| 平和县| 扬中市| 库车县| 海兴县| 九寨沟县| 蓬莱市| 谢通门县| 马山县| 肃北| 远安县|