如果日期相同且SQL Server 2008R2和SQL Server中的所有行名称都应不同,则Id为2和Id为1的具体行

如果日期相同且SQL Server 2008R2和SQL Server中的所有行名称都应不同,则Id为2和Id为1的具体行,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我在myRecords表中有以下数据 Id Date Name Cash 1 11/25/2016 4:23.123 Ramesh 10000 2 11/25/2016 4:23.173 Suresh 15000 1 11/27/2016 5:23.320 Ramesh 30000 2 11/27/2016 5:23.670 Suresh 40000 我想创建一个视图,这样我就可以得到以下格

我在myRecords表中有以下数据

Id     Date                 Name     Cash
1   11/25/2016 4:23.123     Ramesh  10000
2   11/25/2016 4:23.173     Suresh  15000
1   11/27/2016 5:23.320     Ramesh  30000
2   11/27/2016 5:23.670     Suresh  40000
我想创建一个视图,这样我就可以得到以下格式的数据

Id1 Date1               Name1   Cash1   Id2 Date2               Name2   Cash2
1   11/25/2016 4:23.123  Ramesh 10000   2   11/25/2016 4:23.173 Suresh  15000
1   11/27/2016 5:23.320  Ramesh 30000   2   11/27/2016 5:23.670 Suresh  40000
我该怎么做。

只要您的Id加入逻辑不清楚,这在这种情况下会有所帮助,但我想您将来需要添加Id筛选器或额外的标识列和行号

SELECT
     T.*, TT.*
FROM
     [Table] AS T
        INNER JOIN
     [Table] AS TT
        ON T.Date = TT.Date
只要您的Id加入逻辑不清楚,这将有助于这种情况下,但您将需要添加Id过滤器或额外的标识列和行号,我猜在未来

SELECT
     T.*, TT.*
FROM
     [Table] AS T
        INNER JOIN
     [Table] AS TT
        ON T.Date = TT.Date
您可以对所需的结果集使用交叉应用

 SELECT [ID],
           [DATE],
           [NAME],
           [CASH],
           B.*
    FROM   #TABLE1 A
           CROSS APPLY (SELECT ID     AS ID2,
                               [DATE] AS DATE2,
                               [NAME] AS NAME2,
                               [CASH] AS CASH2
                        FROM   #TABLE1 B
                        WHERE  A.ID < B.ID
                               AND CONVERT(DATE, A.DATE) = CONVERT(DATE, B.DATE))B
您可以对所需的结果集使用交叉应用

 SELECT [ID],
           [DATE],
           [NAME],
           [CASH],
           B.*
    FROM   #TABLE1 A
           CROSS APPLY (SELECT ID     AS ID2,
                               [DATE] AS DATE2,
                               [NAME] AS NAME2,
                               [CASH] AS CASH2
                        FROM   #TABLE1 B
                        WHERE  A.ID < B.ID
                               AND CONVERT(DATE, A.DATE) = CONVERT(DATE, B.DATE))B

如果您正在执行日期操作,并且每天始终只有2条记录,则您可以转换为放弃时间并进行自加入:

DECLARE @myRecords AS TABLE (Id INT, DATE DATETIME, Name VARCHAR(20), CASH INT)

INSERT INTO @myRecords VALUES (1,'11/25/2016 4:23','Ramesh',10000),(2,'11/25/2016 4:23','Suresh',15000)
,(1,'11/27/2016 5:23','Ramesh',30000),(2,'11/27/2016 4:23','Suresh',40000)

SELECT
    m1.Id as Id1
    ,m1.Date as Date1
    ,m1.Name as Name1
    ,m1.Cash as Cash1
    ,m2.Id as Id2
    ,m2.Date as Date2
    ,m2.Name as Name2
    ,m2.Cash as Cash2
FROM
    @myRecords m1
    LEFT JOIN @myRecords m2
    ON CAST(m1.DATE AS DATE) = CAST(m2.DATE AS DATE)
    AND m1.Id <> m2.Id
WHERE
    m1.Id = 1

如果您正在执行日期操作,并且每天始终只有2条记录,则您可以转换为放弃时间并进行自加入:

DECLARE @myRecords AS TABLE (Id INT, DATE DATETIME, Name VARCHAR(20), CASH INT)

INSERT INTO @myRecords VALUES (1,'11/25/2016 4:23','Ramesh',10000),(2,'11/25/2016 4:23','Suresh',15000)
,(1,'11/27/2016 5:23','Ramesh',30000),(2,'11/27/2016 4:23','Suresh',40000)

SELECT
    m1.Id as Id1
    ,m1.Date as Date1
    ,m1.Name as Name1
    ,m1.Cash as Cash1
    ,m2.Id as Id2
    ,m2.Date as Date2
    ,m2.Name as Name2
    ,m2.Cash as Cash2
FROM
    @myRecords m1
    LEFT JOIN @myRecords m2
    ON CAST(m1.DATE AS DATE) = CAST(m2.DATE AS DATE)
    AND m1.Id <> m2.Id
WHERE
    m1.Id = 1

这也将返回相同的结果:

select a.id, a.date, a.name, a.cash, b.id as id2, b.date as date2, 
    b.name as name2, b.cash as cash2 
from myTable a
inner join myTable b on a.id+1 = b.id
    and cast(a.date as date) <> cast(b.date as date)

这也将返回相同的结果:

select a.id, a.date, a.name, a.cash, b.id as id2, b.date as date2, 
    b.name as name2, b.cash as cash2 
from myTable a
inner join myTable b on a.id+1 = b.id
    and cast(a.date as date) <> cast(b.date as date)

这可能有几种方法,但为了正确地实现这一点,我们需要知道您打算如何确定哪一行彼此相关,因为名称和ID不匹配。例如,可以基于日期时间创建一个行号,然后使用自连接将行号连接到行号+1,但这就是记录配对的方式吗?取决于您的数据,ID仅为1和2,或者可能为3、4。。。等等??这可能有几种方法,但为了正确处理,我们需要知道您打算如何确定哪一行彼此相关,因为名称和ID不匹配。例如,可以基于日期时间创建一个行号,然后使用自连接将行号连接到行号+1,但这就是记录配对的方式吗?取决于您的数据,ID仅为1和2,或者可能为3、4。。。等等??非常感谢这对我的帮助。还有一个挑战,这里我想更改RowNum是否为偶数的列名,也就是说,如果RowNum为偶数,您在这里创建了另一列。所以现在我想改变列名,使之不同。i、 RowNum2,Id2,Date2,Name2,Cash2。你所需要做的就是给它们加上别名。我已经更新了我的答案,向您展示了如何做到这一点。非常感谢这对我的帮助。还有一个挑战,这里我想更改RowNum是否为偶数的列名,也就是说,如果RowNum为偶数,您已经在这里创建了另一列。所以现在我想改变列名,使之不同。i、 RowNum2,Id2,Date2,Name2,Cash2。你所需要做的就是给它们加上别名。我已经更新了我的答案,告诉你怎么做。