SQL Server 2008中基于计算列的新行

小岛洲

我有一个如下表-sql server 2008

我正在尝试为特定的FINDID再创建一个称为NEW_DATE

第一条记录的新日期比第二条记录的FROM_DATE短-1秒,依此类推…..

这些行以from_date升序进行排序。identify = 1的新日期始终保持为'12 / 31/9999 12:00:00 AM

DDL:

CREATE TABLE MYTABLE
(
FINDID  INT,
SUPPLIERID INT  ,
SUPPLIERSKU VARCHAR (35),
PRICE   decimal (14,4),
FROM_DATE datetime  ,
IDENTIFY bit
)

INSERT MYTABLE

SELECT 1000001, 1001,   '012RE0020',    4,  '5/12/2016  6:49:40 AM',    0 UNION ALL
SELECT 1000001, 1001,   '012RE0020',    4,  '5/12/2016  7:16:24 AM',    0 UNION ALL
SELECT 1000001, 1001,   '012RE0020',    5,  '5/12/2016  7:52:55 AM',    1 UNION ALL
SELECT 1000002, 1001,   '101ME0320',    21, '5/12/2016  6:49:40 AM',    0 UNION ALL
SELECT 1000002, 1001,   '101ME0320',    21, '5/12/2016  7:16:24 AM',    0 UNION ALL
SELECT 1000002, 1001,   '101ME0320',    26, '5/12/2016  7:33:38 AM',    0 UNION ALL
SELECT 1000002, 1001,   '101ME0320',    27, '5/12/2016  7:52:55 AM',    1

输出看起来像

FINDID  SUPPLIERID  SUPPLIERSKU PRICE   FROM_DATE   NEW_TO_DATE IDENTIFY
1000001 1001    012RE0020   4   5/12/2016  6:49:40 AM   5/12/2016  7:16:23 AM   0
1000001 1001    012RE0020   4   5/12/2016  7:16:24 AM   5/12/2016  7:52:54 AM   0
1000001 1001    012RE0020   5   5/12/2016  7:52:55 AM   12/31/9999  12:00:00 AM 1
1000002 1001    101ME0320   21  5/12/2016  6:49:40 AM   5/12/2016  7:16:23 AM   0
1000002 1001    101ME0320   21  5/12/2016  7:16:24 AM   5/12/2016  7:33:37 AM   0
1000002 1001    101ME0320   26  5/12/2016  7:33:38 AM   5/12/2016  7:52:54 AM   0
1000002 1001    101ME0320   27  5/12/2016  7:52:55 AM   12/31/9999  12:00:00 AM 1

谁能在SQL中帮助我

gofr1

我建议您创建这样的视图:

CREATE VIEW dbo.MyView
AS
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY FINDID ORDER BY FINDID, FROM_DATE) as RN
FROM MYTABLE m
)

SELECT  c.FINDID,
        c.SUPPLIERID, 
        c.SUPPLIERSKU,
        c.PRICE,
        c.FROM_DATE,
        ISNULL(DATEADD(second,-1,c2.FROM_DATE),'12/31/9999  12:00:00 AM') as NEW_TO_DATE,
        c.IDENTIFY
FROM cte c
LEFT JOIN cte c2
    ON c2.RN = c.RN + 1 AND c.FINDID = c2.FINDID;
GO

输出:

FINDID  SUPPLIERID  SUPPLIERSKU PRICE   FROM_DATE               NEW_TO_DATE             IDENTIFY
1000001 1001        012RE0020   4.0000  2016-05-12 06:49:40.000 2016-05-12 07:16:23.000 0
1000001 1001        012RE0020   4.0000  2016-05-12 07:16:24.000 2016-05-12 07:52:54.000 0
1000001 1001        012RE0020   5.0000  2016-05-12 07:52:55.000 9999-12-31 00:00:00.000 1
1000002 1001        101ME0320   21.0000 2016-05-12 06:49:40.000 2016-05-12 07:16:23.000 0
1000002 1001        101ME0320   21.0000 2016-05-12 07:16:24.000 2016-05-12 07:33:37.000 0
1000002 1001        101ME0320   26.0000 2016-05-12 07:33:38.000 2016-05-12 07:52:54.000 0
1000002 1001        101ME0320   27.0000 2016-05-12 07:52:55.000 9999-12-31 00:00:00.000 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server 2008中基于计算列的新行

来自分类Dev

使用SQL Server 2008计算列中存在的组数

来自分类Dev

基于其他列在 Sql Server 中创建新列

来自分类Dev

根据sql server 2008中的列值显示行

来自分类Dev

SQL Server中的计算列

来自分类Dev

计算详细记录并显示在sql server的新列中

来自分类Dev

基于SQL Server中的条件行分组的列值相乘

来自分类Dev

在SQL Server 2008中的列中添加#

来自分类Dev

在SQL Server 2008中列为行

来自分类Dev

SQL Server 2008中的自动行删除

来自分类Dev

SQL Server 2008中列的不同值

来自分类Dev

在SQL Server 2008中透视多个列

来自分类Dev

SQL Server 2008 R2,计算列中的混合参数

来自分类Dev

基于SQL Server中的列进行计数

来自分类Dev

当新行插入到SQL Server 2008 DB中时,将新行自动添加到Repeater Control中

来自分类Dev

计算SQL Server中的先前连续行

来自分类Dev

计算SQL Server 2008中每个国家/地区的人数

来自分类Dev

如何在SQL Server 2008中计算累积积?

来自分类Dev

从Microsoft SQL Server 2008中的列中的每个不同字段中获取前2行

来自分类Dev

SQL Server计算列中的TryParse

来自分类Dev

SQL Server计算列中的TryParse

来自分类Dev

SQL Server 2008中的减法

来自分类Dev

SQL Server 2008中的递归

来自分类Dev

在SQL Server 2008中订购

来自分类Dev

如何基于选择列SQL Server计算DISTINCT

来自分类Dev

基于序列的SQL Server 2008组

来自分类Dev

SQL Server 2008在表中插入缺少日期的新记录

来自分类Dev

SQL Server 2008中的SQL FIFO逻辑

来自分类Dev

SQL Server 2008中的SQL FIFO逻辑