微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlserver2008 利用函数列转行实例

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐