加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver2008 利用函数列转行实例

发布时间:2020-12-12 14:50:33 所属栏目:MsSql教程 来源:网络整理
导读:1. 前提固定行数 如:固定前10行等。 IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[FUN_GET_工程番号SQL]') AND type in (N'FN',N'IF',N'TF',N'FS',N'FT')) DROP FUNCTION [dbo].[FUN_GET_工程番号SQL] GO -- ===============

1. 前提固定行数 如:固定前10行等。

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[FUN_GET_工程番号SQL]') AND type in (N'FN',N'IF',N'TF',N'FS',N'FT'))
DROP FUNCTION [dbo].[FUN_GET_工程番号SQL]
GO

-- =============================================
-- Description:?<GET_工程番号SQL>
-- Author:??<>
-- Create date: <2011/11/29>
-- =============================================
?CREATE? FUNCTION [dbo].[FUN_GET_工程番号SQL]
?(
? @IN_作業票番号 VARCHAR(15),
? @IN_工程番号 NUMERIC(3),
? @IN_連番 INT
?)
? RETURNS?? VARCHAR(4000)??
? AS
? BEGIN
????????? DECLARE @SQL VARCHAR(4000)??
????????? SET @SQL = ''
????????? SELECT @SQL = @SQL+CONVERT(NVARCHAR,@IN_連番-1)++'='+CONVERT(NVARCHAR,工程番号)
????????? FROM VTプロダクションコントロール工程 AS T
????????? WHERE T.作業票番号=@IN_作業票番号 AND 工程番号 = @IN_工程番号??
????????? RETURN? @SQL
? END
?GO

?

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'FUN_LIST_工程番号行表示') AND type in (N'FN',N'FT'))
DROP FUNCTION [dbo].[FUN_LIST_工程番号行表示]
GO

-- =============================================
-- Description:?<LIST_工程番号行表示>
-- Author:??<>
-- Create date: <2011/11/29>
-- =============================================
CREATE FUNCTION [dbo].[FUN_LIST_工程番号行表示]
(
? @IN_作業票番号 VARCHAR(15),--作業票番号
? @IN_TOP件数 VARCHAR(3)????? --TOP件数
)
RETURNS TABLE
AS
RETURN
(
?SELECT
?REPLACE(MAX(備考0),'0=','') AS 備考1,
?REPLACE(MAX(備考1),'1=','') AS 備考2,
?REPLACE(MAX(備考2),'2=','') AS 備考3,
?REPLACE(MAX(備考3),'3=','') AS 備考4,
?REPLACE(MAX(備考4),'4=','') AS 備考5,
?REPLACE(MAX(備考5),'5=','') AS 備考6,
?REPLACE(MAX(備考6),'6=','') AS 備考7,
?REPLACE(MAX(備考7),'7=','') AS 備考8,
?REPLACE(MAX(備考8),'8=','') AS 備考9,
?REPLACE(MAX(備考9),'9=','') AS 備考10
?FROM (
?SELECT TOP (CONVERT(INT,@IN_TOP件数))
?CASE WHEN DBO.FUN_GET_工程番号SQL(作業票番号,工程番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '0%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考0',
?CASE WHEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '1%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考1',ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '2%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考2',
? CASE WHEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '3%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考3',ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '4%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考4',ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '5%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考5',ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '6%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考6',ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '7%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考7',ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '8%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考8',ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) LIKE '9%'
?THEN DBO.FUN_GET_工程番号SQL(作業票番号,ROW_NUMBER() OVER(ORDER BY 作業票番号 ASC)) ELSE NULL END '備考9'
?FROM VTプロダクションコントロール工程 WHERE 作業票番号=@IN_作業票番号
) A
)

GO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读