sqlserver2008 利用函数列转行实例

sqlserver2008 利用函数列转行实例,第1张

概述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] @H_301_2@

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

@H_301_2@ 总结

以上是内存溢出为你收集整理的sqlserver2008 利用函数列转行实例全部内容,希望文章能够帮你解决sqlserver2008 利用函数列转行实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1179986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存