陈酉昔xx 2021-05-11 10:48 采纳率: 100%
浏览 40
已结题

sql问题,求大神给demo

 

  • 写回答

2条回答 默认 最新

  • benbenli 2021-05-11 21:07
    关注

    第一题定义了一个函数循环检查前一天类型是否为B并累计工期。

    
    CREATE TABLE Project
    (
    	Type Char(1),
    	Duration Int,
    	Sequence Date
    );
    
    INSERT INTO Project
    VALUES  ('A', 10, '2021-01-01'),
    		('A', 10, '2021-01-02'),
    		('B', 10, '2021-01-03'),
    		('A', 10, '2021-01-04'),
    		('B', 10, '2021-01-05'),
    		('B', 10, '2021-01-06'),
    		('B', 10, '2021-01-07'),
    		('A', 10, '2021-01-08'),
    		('B', 10, '2021-01-09'),
    		('A', 10, '2021-01-10');
    
    
    IF OBJECT_ID (N'dbo.udfRollupPreviousDuration', N'FN') IS NOT NULL  
        DROP FUNCTION udfRollupPreviousDuration;  
    GO  
    CREATE FUNCTION dbo.udfRollupPreviousDuration(@Sequence Date)  
    RETURNS int
    AS   
    BEGIN
    	DECLARE @PreviousDay DATE;
        DECLARE @Type Char(1);  
    	DECLARE @Duration Int;
    	DECLARE @TotalDuration Int
    
    	SET @TotalDuration = 0
    	SET @PreviousDay = DATEADD(DAY, -1, @Sequence);
    
    	WHILE 1 = 1
    	BEGIN
    		--PRINT CONCAT('@PreviousDay=', @PreviousDay);
    		SELECT	@Type = Type,
    				@Duration = Duration
    		FROM	Project   
    		WHERE	Sequence = @PreviousDay
    
    		IF @Type IS NULL OR @Type <> 'B' 
    			BREAK;  
    	 
    		--PRINT CONCAT('@Duration=', STR(@Duration));
    		SET @TotalDuration = @TotalDuration + @Duration;
    		SET @PreviousDay = DATEADD(DAY, -1, @PreviousDay);
    	END
    
    	RETURN @TotalDuration;
    END; 
    
    SELECT	Sequence,
    		Duration + dbo.udfRollupPreviousDuration(Sequence) AS TotalDuration
    FROM	Project
    ORDER BY Sequence
    ;
    
    
    // Results:
    2021-01-01	10
    2021-01-02	10
    2021-01-03	10
    2021-01-04	20
    2021-01-05	10
    2021-01-06	20
    2021-01-07	30
    2021-01-08	40
    2021-01-09	10
    2021-01-10	20

    第二题比较容易,分别用子铲鲟求和再相减。

    SELECT	(SELECT SUM(Amt) FROM Receivable) - (SELET SUM(Amt) FROM Payable) AS Balance
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月15日

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题