Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 自动填充缺失日期行的值_Sql Server 2005 - Fatal编程技术网

Sql server 2005 自动填充缺失日期行的值

Sql server 2005 自动填充缺失日期行的值,sql-server-2005,Sql Server 2005,我有一张类似下面的桌子 Date | qty1 | qty2 | qty3 | qty4 | column6 1 july | 33 | 0 | 0 | 0 | xyz 1 July | 0 | 20 | 0 | 0 | xyz 1 July | 18 | 0 | 0 | 0 | abc 3 July | 0 | 0 | 0 | 11 | abc 3 july | 23 | 0 | 0 |

我有一张类似下面的桌子

Date   | qty1 | qty2 | qty3 | qty4 | column6
1 july | 33   | 0    |  0   | 0    | xyz
1 July | 0    | 20   | 0    | 0    | xyz
1 July | 18   | 0    | 0    | 0    | abc
3 July | 0    | 0    | 0    | 11   | abc
3 july | 23   | 0    |  0   | 0    | xyz
4 July | 0    | 40   | 0    | 0    | xyz
4 July | 57   | 0    | 0    | 0    | abc
7 July | 0    | 12   | 0    | 0    | xyz
我在SQLServer2005中的存储过程中寻找如下输出

 Date   | qty1 | qty2 | qty3 | qty4 
 1 July | 51   | 20   | 0    | 0 
 2 July | 0    | 0    | 0    | 0
 3 July | 23   | 0    | 0    | 11
 4 July | 57   | 40   | 0    | 0
 5 July | 0    | 0    | 0    | 0
 6 July | 0    | 0    | 0    | 0
 7 July | 0    | 12   | 0    | 0

正如您所注意到的,我希望它自动为缺少的日期设置0值。我想知道这是否可能。

您可以在日期列上使用GETDATE()自动获取它(除非您打算在其中丢失日期值)。在另一种情况下,可以在该列中设置默认值(或默认约束),如果这是您的意思,则将默认值设置为0。或者,您的意思是要返回到已插入的行并编辑列吗?

在存储过程中,您可以将其处理为isNull(列,0)如果您可以从实际的表中默认生成一个月内的所有日期,则它将适用于存储过程中的插入或检索查询。

:1
意味着解决方案将非常简单。。。像

 SELECT     date  AS Date ,
            ISNULL(qty1, '') AS qty1,
            ISNULL(qty2, '') AS qty2,
            ISNULL(qty3, '') AS qty3,
            ISNULL(qty4, '') AS qty4,
    FROM    your_table_name where for_all_date
否则你想做一些像这样的

CREATE PROCEDURE put_null ()
AS 
DECLARE @start_date DATETIME
DECLARE @End_date DATETIME
    BEGIN             
      SELECT TOP 1 @start_date = date FROM your_table_name ORDER BY Date   
      SELECT TOP 1 @End_date = date FROM your_table_name ORDER BY Date  DESC 
        WHILE(@start_Date < = @End_date)
        BEGIN
        SELECT  @start_date AS Date ,
                ISNULL(qty1, 0) AS qty1,
                ISNULL(qty2, 0) AS qty2,
                ISNULL(qty3, 0) AS qty3,
                ISNULL(qty4, 0) AS qty4,
        FROM    your_table_name

        SET @start_date = DATEADD(DAY,1,@start_date)
        END
    END     
创建过程put\u null()
作为
声明@start_date DATETIME
声明@End_date DATETIME
开始
从表格中选择TOP 1@start\u date=日期按日期排序
从您的表格中选择TOP 1@End\u date=date\u name ORDER BY date DESC
而(@start\u Date<=@End\u Date)
开始
选择@start_date作为日期,
ISNULL(qty1,0)作为qty1,
ISNULL(qty2,0)作为qty2,
ISNULL(qty3,0)作为qty3,
ISNULL(qty4,0)作为qty4,
从您的\u表\u名称
设置@start\u date=DATEADD(第1天,@start\u date)
结束
结束

希望这能解决你的问题

谢谢你的回复,但我不明白你在这里的确切意思。我将在哪里写
isnull(第0列)