我试图去掌握使用函数Partition
生成结果,不幸的是我正在处理别人没有主键的表设计,我不能添加一个“可怕的我知道“SQL Server:分区
我的示例代码如下
CREATE TABLE mytable (OrderNo varchar(20), TaskNo int, Hours Decimal(2))
insert into mytable values ('GNR68003327','0001',1)
insert into mytable values ('GNR68003327','0002',2)
insert into mytable values ('GNR68003327','0002',2)
insert into mytable values ('GNR68003327','0002',2)
insert into mytable values ('GNR68003327','0003',0)
insert into mytable values ('GNR68003327','0004',0)
insert into mytable values ('GNR68003327','0005',0)
insert into mytable values ('GNR68003327','0006',0)
insert into mytable values ('GNR68003327','0007',4)
insert into mytable values ('GNR68003327','0007',4)
insert into mytable values ('GNR68003327','0007',4)
insert into mytable values ('GNR68003327','0007',4)
我知道我可以只使用一个独特得到以下的结果,但在这种情况下,我将使用分区的更好,由于这是只是一个示例我正在尝试这么做,还有更多的事情要做。
我想要做的每TaskNo
变化返回Hours
列的第一个值,所以结果应该是
OrderNo TaskNo Hours
GRN68003327 0001 1
GRN68003327 0002 2
GRN68003327 0003 0
GRN68003327 0004 0
GRN68003327 0005 0
GRN68003327 0006 0
GRN68003327 0007 4
我认为它应该是这个样子,但我只是不能得到所要求的结果
SELECT
OrderNo, TaskNo,
First_Value(Hours) OVER (PARTITION BY OrderNo ORDER BY TaskNo)
FROM
mytable
如果有人可以帮助它将不胜感激。
感谢菲尔
我假设你正在使用SQL 2012,因为你使用'First_Value'函数?如果是这样,那么SQL 2008标记不适用。 –
嗨Stanley,是的,我使用SQL Server 2012,谢谢P – PJD