-2

全部,

我有以下查询,它按照我的预期创建了一个结果集,但是真实记录都以行号 1 回归。我希望它们像假记录一样以递增的行号返回(当你看到代码和结果你会明白我的意思。)。

Declare @FakeEquipment TABLE(
EquipmentID varchar(25),
EquipmentDesc varchar(150), 
TrackingID varchar(25))

Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz01')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz02')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz03')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz04')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz05')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz06')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz07')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz08')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz09')
Insert into @FakeEquipment values( 'aaaa01',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa02',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa03',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa04',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa05',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa06',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa07',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa08',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa09',NULL,'zzz10')
Insert into @FakeEquipment values( 'aaaa10',NULL,'zzz10')


Select 
        Equipment_EquipmentID,
        Equipment_Description,
        JobAccount_TrackingID
        ,row as rowcnt

        from 
        (
        Select row_number() over (partition by Equipment_EquipmentID order by JobAccount_TrackingID) row,*
        from 

        (SELECT DISTINCT
        CustomizedFieldLogEquipmentJobAccount_1.Equipment_EquipmentID, 
        CustomizedFieldLogEquipmentJobAccount_1.Equipment_Description, 
        CustomizedFieldLogEquipmentJobAccount_1.JobAccount_TrackingID
        FROM
        CustomizedFieldLogEquipmentJobAccount AS CustomizedFieldLogEquipmentJobAccount_1 INNER JOIN CustomizedAccount ON CustomizedFieldLogEquipmentJobAccount_1.Account_AccountID = CustomizedAccount.AccountID
        WHERE
        (CustomizedAccount.AppliesToEquipment = 1)
        AND 
        (CustomizedFieldLogEquipmentJobAccount_1.FieldLog_FieldLogID =1219)
        AND
        IsRented = 0
        AND
        isnumeric(right(CustomizedFieldLogEquipmentJobAccount_1.JobAccount_TrackingID,1))=1

        union

        select 
        EquipmentID, 
        EquipmentDesc,
        TrackingID
        from @FakeEquipment) a 
)b 

Group By
Equipment_EquipmentID,
Equipment_Description,
JobAccount_TrackingID
,row
order by Equipment_EquipmentID

它返回结果如下:

Equipment_EquipmentID   Equipment_Description   JobAccount_TrackingID   rowcnt
1218    PAVER   0441-01409  1
127 Ford F250 Pick-Up   0441-01409  1
1350    PNEUMATIC ROLLER    0441-01409  1
1354    VIBRATORY PUP ROLLER    0441-01409  1
1445    JOHN DEERE SKIP 0441-01409  1
16-003  FORD F-350  0441-01409  1
30  F550 CREW TRUCK 0441-01409  1
3-007   TRAFFIC CONTROL F-550   0441-01409  1
6-002   CAT PAVING ROLLER   0441-01409  1
6-006   CAT PAVING ROLLER   0441-01409  1
aaaa01  NULL    zzz01   1
aaaa01  NULL    zzz02   2
aaaa01  NULL    zzz03   3
aaaa01  NULL    zzz04   4
aaaa01  NULL    zzz05   5
aaaa01  NULL    zzz06   6
aaaa01  NULL    zzz07   7
aaaa01  NULL    zzz08   8
aaaa01  NULL    zzz09   9
aaaa01  NULL    zzz10   10

如您所见,假设备表中的记录都有正确的行号,而真实记录的行号都是 1。

我要做的是在 2 个 SSRS 2005 矩阵控件之间拆分记录集,因此每个控件都有 6 条记录(最多 12 条),但我无法做到这一点。对此方向的任何帮助表示赞赏。

4

3 回答 3

1

这是按预期对记录进行编号。您正在对数据进行分区,Equipment_EquipmentID并且您从值的第一部分获得的数据union都是不同的。所以row_number不会增加。

仅当row_number()分区中的值与您的值不同时才会增加。

如果你想使用row_number()你可能不得不改变你分区的方式。

例如使用以下数据:

CREATE TABLE yourData
    ([Equipment_EquipmentID] varchar(6), [JobAccount_TrackingID] varchar(10))
;

INSERT INTO yourData
    ([Equipment_EquipmentID], [JobAccount_TrackingID])
VALUES
    ('1218', '0441-01409'),
    ('127', '0441-01409'),
    ('1350', '0441-01409'),
    ('1354', '0441-01409'),
    ('1445', '0441-01409'),
    ('16-003', '0441-01409'),
    ('30', '0441-01409'),
    ('3-007', '0441-01409'),
    ('6-002', '0441-01409'),
    ('6-006', '0441-01409')
;

如果您使用以下查询:

select *,
  row_number() over(partition by Equipment_EquipmentID order by JobAccount_TrackingID) rn1
from yourdata;

您将看到行号没有增加。

但是,如果您将分区更改为以下内容:

select *,
  row_number() over(partition by JobAccount_TrackingID order by JobAccount_TrackingID) rn2
from yourdata;

行号递增。

请参阅带有两个查询的演示的 SQL Fiddle 。

于 2012-12-28T04:01:02.117 回答
0

当您实际添加唯一行 ID 时,这是可能的。

首先为“ID”添加一个新列到表中,并自动用递增的数字填充它。

然后每一行都有一个唯一的 ID,您可以通过该 ID 调用特定的行。

于 2012-12-28T04:08:22.083 回答
0

蓝脚的答案+1。我更喜欢让数据库比报告做更多的计算,在这种情况下输出决定矩阵的“组”列,然后在“组”列上使用矩阵过滤器可能更简单:

SELECT  *, 
        [Grouping] = CASE 
            WHEN ROW_NUMBER() OVER (ORDER BY NEWID()) <= 6 THEN 'A' 
            WHEN ROW_NUMBER() OVER (ORDER BY NEWID()) <= 12 THEN 'B' 
            ELSE 'C' 
        END 
FROM    ...
于 2013-01-04T04:11:55.703 回答