.net - 如何重复行值

标签 .net sql-server vb.net

如何将行值重复到结束日期

例如

表1

Date         Name   Dept 
-----------------------
12-02-2009   Raja   IT
13-02-2009   Ravi   CSE
14-02-2009   Ramu   ECE

根据上表的值,我想重复从 12-02-2009 到 12-03-2009 这两个日期之间的值。

预期输出

Date         Name   Dept 
--------------------------
12-02-2009   Raja   IT
13-02-2009   Ravi   CSE
14-02-2009   Ramu   ECE
15-02-2009   Raja   IT
16-02-2009   Ravi   CSE
17-02-2009   Ramu   ECE
18-02-2009   Raja   IT
19-02-2009   Ravi   CSE
20-02-2009   Ramu   ECE
...
...
12-03-2009

如何查询重复行值直到结束日期,或者在 vb.net 中可以通过使用 while 循环来查询

代码

select max(date) from table

while max(date) < End Date

'Repeat the row values

end while

我的表格结构

日期姓名部门时间

12-02-2009   Raja   IT  09:00 
13-02-2009   Ravi   CSE 18:00 
14-02-2009   Ramu   ECE 10:00

预期输出

Date Name Dept Time StartDate EndDate

12-02-2009   Raja   IT  09:00 12-02-2009 12-02-2009
13-02-2009   Ravi   CSE 18:00 13-02-2009 14-02-2009
14-02-2009   Ramu   ECE 10:00 14-02-2009 14-02-2009

...,

如果 StartDate 与 Date 列的值相同 对于 EndDate,我必须检查时间列,如果时间大于 17:00,它应该在 EndDate 列中显示下一个日期。

需要 SQL 查询或 VB.Net 代码帮助

最佳答案

你可以尝试类似的东西

DECLARE @Table TABLE(
        Date DATETIME,
        Name VARCHAR(50),
        Dept VARCHAR(50)
)

INSERT INTO @Table SELECT '12 Feb 2009', 'Raja', 'IT'
INSERT INTO @Table SELECT '13 Feb 2009', 'Ravi', 'CSE'
INSERT INTO @Table SELECT '14 Feb 2009', 'Ramu', 'ECE'



DECLARE @StartDate DATETIME,
        @EndDate DATETIME,
        @Count INT

SELECT @Count = COUNT(1) FROM @Table

SELECT @StartDate = '12 Feb 2009',
        @EndDate = '12 Mar 2009'

--using CTE create a date range, and associated id per date
;WITH Dates AS (
        SELECT  @StartDate DateVal,
                0 ID
        UNION ALL
        SELECT  DateVal + 1,
                (ID + 1) % @Count
        FROM Dates
        WHERE DateVal + 1 <= @EndDate
),
--using cte, create id per entry in the table you wish to repeat
RowNumbers AS(
        SELECT  *,
                ROW_NUMBER() OVER(ORDER BY Date) ID
        FROM    @Table
)
--join dates to table to repeat id generated ids.
SELECT  *
FROM    Dates d LEFT JOIN
        RowNumbers r on d.ID + 1 = r.ID

看看

用于使用来自 vb.net/c# 的参数执行查询

编辑

要获得预期的输出,您可以尝试

DECLARE @Table TABLE(
        Date DATETIME,
        Name VARCHAR(50),
        Dept VARCHAR(50),
        Time VARCHAR(5)
)

INSERT INTO @Table SELECT  '12 Feb 2009','Raja','IT','09:00'
INSERT INTO @Table SELECT  '13 Feb 2009','Ravi','CSE','18:00'
INSERT INTO @Table SELECT  '14 Feb 2009','Ramu','ECE','10:00'

SELECT  *,
        Date AS StartDate,
        CASE 
            WHEN CAST(LEFT(Time,2) AS INT) > 17 THEN Date + 1 
            ELSE DATE 
        END EndDate
FROM    @Table

现在您需要决定要在 ROW_NUMBER() 行中使用哪个日期作为排序依据,或者您希望如何按日期重复行。

编辑

This is how you would insert values

DECLARE @InsertTable TABLE(
        DateVal DATETIME,
        ID INT,
        Date DATETIME,
        Name VARCHAR(50),
        Dept VARCHAR(50)
)

DECLARE @Table TABLE( 
        Date DATETIME, 
        Name VARCHAR(50), 
        Dept VARCHAR(50) 
) 

INSERT INTO @Table SELECT '12 Feb 2009', 'Raja', 'IT' 
INSERT INTO @Table SELECT '13 Feb 2009', 'Ravi', 'CSE' 
INSERT INTO @Table SELECT '14 Feb 2009', 'Ramu', 'ECE' 



DECLARE @StartDate DATETIME, 
        @EndDate DATETIME, 
        @Count INT 

SELECT @Count = COUNT(1) FROM @Table 

SELECT @StartDate = '12 Feb 2009', 
        @EndDate = '12 Mar 2009' 

--using CTE create a date range, and associated id per date 
;WITH Dates AS ( 
        SELECT  @StartDate DateVal, 
                0 ID 
        UNION ALL 
        SELECT  DateVal + 1, 
                (ID + 1) % @Count 
        FROM Dates 
        WHERE DateVal + 1 <= @EndDate 
), 
--using cte, create id per entry in the table you wish to repeat 
RowNumbers AS( 
        SELECT  *, 
                ROW_NUMBER() OVER(ORDER BY Date) ID 
        FROM    @Table 
) 
--join dates to table to repeat id generated ids. 
INSERT INTO @InsertTable --INSERT VALUES HERE
SELECT  d.DateVal,
        d.ID,
        r.Date,
        r.Name,
        r.Dept 
FROM    Dates d LEFT JOIN 
        RowNumbers r on d.ID + 1 = r.ID
OPTION (MAXRECURSION 0) --this is required.           

SELECT *
FROM @InsertTable

关于.net - 如何重复行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2234517/

相关文章:

sql - 如何有条件地返回一个字段或另一个字段?

vb.net - 如何重构一个类? (VB.Net)

vb.net - VB.NET 中的启动表单问题

javascript - 正则表达式允许无限精度

.net - 投票 : What do you call your business layer base namespace?

c# - 类别树的 Asp.net mvc 动态路由

sql - 嵌套游标、多个结果集

c# - WPF中如何使用WebKit浏览器控件

mysql - sql查询打印ID :Name mapping

vb.net - 32 位和 64 位机器之间的错误图像格式异常