Sql server 基于另一个SQL列的增量SQL列

Sql server 基于另一个SQL列的增量SQL列,sql-server,Sql Server,考虑到我有这样一个问题: select employeeid as id, department as dep from employee where department in (...) order by department id dep magic 1 Accounting 0 30 Accounting 0 66 HR 0 67 HR 0 33 HR 0 2 Sales 0 9 IT 1

考虑到我有这样一个问题:

select employeeid as id, department as dep from employee where department in (...) 
order by department
id dep        magic
1  Accounting 0
30 Accounting 0
66 HR         0
67 HR         0
33 HR         0
2  Sales      0
9  IT         1
12 R&D        1
19 Design     1
45 QA         2
46 QA         2
我希望有一个额外的列,每3个部门增加一个列,结果如下所示:

select employeeid as id, department as dep from employee where department in (...) 
order by department
id dep        magic
1  Accounting 0
30 Accounting 0
66 HR         0
67 HR         0
33 HR         0
2  Sales      0
9  IT         1
12 R&D        1
19 Design     1
45 QA         2
46 QA         2
我尝试过各种行号函数,以及其他伏都教,但我似乎无法正确使用。希望你能帮我做这个

编辑:所以这并不像我希望的那样直截了当。上面的例子可能没有涵盖我的案例中涉及的所有问题。 这就是我正在运行的真正查询:

select    sdi.sdcid
         ,sdi.keyid1
         ,sdi.paramlistid
         ,sdi.paramlistversionid
         ,sdi.variantid
         ,sdi.dataset
         ,sdi.paramid
         ,sdi.paramtype
         ,sdi.replicateid
         ,sd.sdidataid
        --(ROW_NUMBER() over(order by sd.sdidataid asc) -1) /3 partition
         from sdidataitem sdi
         left join sdidata sd on 
         sdi.keyid1 = sd.keyid1 
         and sdi.keyid2 = sd.keyid2 
         and sdi.keyid3 = sd.keyid3 
         and sdi.paramlistid = sd.paramlistid 
         and sdi.paramlistversionid = sd.paramlistversionid 
         and sdi.variantid = sd.variantid 
         and sdi.dataset = sd.dataset 
         where sd.sdidataid in (select top 30 sdidataid from sdidata) 
         and sdi.u_analysserieid is null
         order by sd.sdidataid asc    
当我使用分区列运行查询时,会出现以下错误:找不到列sd或用户定义函数或聚合sd.sdidataid,或者名称不明确。 这是创建所涉及的两个表的代码:

CREATE TABLE [lv2056d].[sdidata]  ( 
[sdcid]                     nvarchar(40) NOT NULL,
[keyid1]                    nvarchar(40) NOT NULL,
[keyid2]                    nvarchar(40) NOT NULL,
[keyid3]                    nvarchar(40) NOT NULL,
[paramlistid]               nvarchar(40) NOT NULL,
[paramlistversionid]        nvarchar(40) NOT NULL,
[variantid]                 nvarchar(40) NOT NULL,
[dataset]                   numeric(18,0) NOT NULL,
[limitruleid]               nvarchar(40) NULL,
[limitruleversionid]        nvarchar(40) NULL,
[modifiableflag]            nvarchar(1) NULL,
[approvalsequenceflag]      nvarchar(1) NULL,
[approvalpassrule]          nvarchar(20) NULL,
[condition]                 nvarchar(80) NULL,
[availabilityflag]          nvarchar(1) NULL,
[workflowid]                nvarchar(40) NULL,
[workflowversionid]         nvarchar(40) NULL,
[workflowinstance]          numeric(18,0) NULL,
[usersequence]              numeric(18,0) NULL,
[notes]                     nvarchar(2000) NULL,
[auditsequence]             numeric(18,0) NULL,
[auditdeferflag]            nvarchar(1) NULL,
[tracelogid]                nvarchar(40) NULL,
[createdt]                  datetime NULL,
[createby]                  nvarchar(40) NULL,
[createtool]                nvarchar(20) NULL,
[moddt]                     datetime NULL,
[modby]                     nvarchar(40) NULL,
[s_datasetstatus]           nvarchar(20) NULL,
[modtool]                   nvarchar(20) NULL,
[s_notebookreference]       nvarchar(20) NULL,
[s_assignedanalyst]         nvarchar(40) NULL,
[s_instrumentid]            nvarchar(40) NULL,
[s_icoverriddenflag]        nvarchar(1) NULL,
[s_retestedflag]            nvarchar(1) NULL,
[s_remeasuredflag]          nvarchar(1) NULL,
[s_remeasureinstance]       numeric(18,0) NULL,
[s_qcbatchid]               nvarchar(40) NULL,
[s_qcbatchitemid]           nvarchar(20) NULL,
[trackitemid]               nvarchar(40) NULL,
[scheduleplanid]            nvarchar(40) NULL,
[scheduleplanitemid]        nvarchar(40) NULL,
[uniquenessflag]            nvarchar(1) NULL,
[approvalflag]              nvarchar(1) NULL,
[sdidataid]                 nvarchar(40) NULL,
[sourceworkitemid]          nvarchar(40) NULL,
[sourceworkiteminstance]    numeric(18,0) NULL,
[s_cancellableflag]         nvarchar(1) NULL,
[documentid]                nvarchar(40) NULL,
[documentversionid]         nvarchar(40) NULL,
[blockflag]                 nvarchar(1) NULL,
[activeflag]                nvarchar(1) NULL,
[s_assigneddepartment]      nvarchar(40) NULL,
[s_instrumentusedflag]      nvarchar(1) NULL,
CONSTRAINT [xpksdidata] PRIMARY KEY CLUSTERED([sdcid],[keyid1],[keyid2],[keyid3],[paramlistid],[paramlistversionid],[variantid],[dataset]))
GO
CREATE TABLE [lv2056d].[sdidataitem]  ( 
[sdcid]                 nvarchar(40) NOT NULL,
[keyid1]                nvarchar(40) NOT NULL,
[keyid2]                nvarchar(40) NOT NULL,
[keyid3]                nvarchar(40) NOT NULL,
[paramlistid]           nvarchar(40) NOT NULL,
[paramlistversionid]    nvarchar(40) NOT NULL,
[variantid]             nvarchar(40) NOT NULL,
[dataset]               numeric(18,0) NOT NULL,
[paramid]               nvarchar(40) NOT NULL,
[paramtype]             nvarchar(80) NOT NULL,
[replicateid]           numeric(18,0) NOT NULL,
[aliasid]               nvarchar(80) NULL,
[mandatoryflag]         nvarchar(1) NULL,
[datatypes]             nvarchar(20) NULL,
[enteredvalue]          numeric(28,10) NULL,
[enteredtext]           nvarchar(255) NULL,
[enteredunits]          nvarchar(40) NULL,
[operatorrule]          nvarchar(255) NULL,
[transformvalue]        numeric(28,10) NULL,
[transformdt]           datetime NULL,
[transformtext]         nvarchar(255) NULL,
[transformrule]         nvarchar(4000) NULL,
[displayvalue]          nvarchar(255) NULL,
[displayunits]          nvarchar(40) NULL,
[displayformat]         nvarchar(255) NULL,
[rangeoperator]         nvarchar(20) NULL,
[enteredqualifier]      nvarchar(20) NULL,
[entrysdcid]            nvarchar(40) NULL,
[entryreftypeid]        nvarchar(40) NULL,
[calcrule]              nvarchar(4000) NULL,
[measurementactionid]   nvarchar(40) NULL,
[releasedflag]          nvarchar(1) NULL,
[valuestatus]           nvarchar(20) NULL,
[condition]             nvarchar(80) NULL,
[transformdeferflag]    nvarchar(1) NULL,
[textcolor]             numeric(18,0) NULL,
[usersequence]          numeric(18,0) NULL,
[notes]                 nvarchar(2000) NULL,
[auditsequence]         numeric(18,0) NULL,
[auditdeferflag]        nvarchar(1) NULL,
[tracelogid]            nvarchar(40) NULL,
[createdt]              datetime NULL,
[createby]              nvarchar(40) NULL,
[createtool]            nvarchar(20) NULL,
[moddt]                 datetime NULL,
[modby]                 nvarchar(40) NULL,
[modtool]               nvarchar(20) NULL,
[s_acoverriddenflag]    nvarchar(1) NULL,
[s_analystid]           nvarchar(40) NULL,
[s_qcevalstatus]        nvarchar(20) NULL,
[displayvalueformat]    nvarchar(255) NULL,
[calcexcludeflag]       nvarchar(1) NULL,
[sdidataitemid]         nvarchar(40) NULL,
[instrumentid]          nvarchar(40) NULL,
[instrumentfieldid]     nvarchar(20) NULL,
[activeflag]            nvarchar(1) NULL,
[externalreference]     nvarchar(255) NULL,
[resulttimeoffset]      numeric(28,10) NULL,
[u_analysserieid]       nvarchar(20) NULL,
[u_showindataentry]     nvarchar(20) NULL,
[w_instrumentid]        nvarchar(20) NULL,
[u_defvalset]           nvarchar(20) NULL,
CONSTRAINT [xpksdidataitem] PRIMARY KEY CLUSTERED([sdcid],[keyid1],[keyid2],[keyid3],[paramlistid],[paramlistversionid],[variantid],[dataset],[paramid],[paramtype],[replicateid]))
GO

您可以在…/三,

select employeeid as id, department as dep , 
(row_number() over (order by department asc) -1) /3 partition
from employee 
where department in (...) 
order by department
关于你的问题。 1您似乎在第一个字段后漏掉了逗号 2如果您真的要连接表,最好使用join,这只是为了清楚起见

select sd.sdidataid, (ROW_NUMBER() over(order by sd.sdidataid asc) -1) /3 partition 
from sdidataitem sdi inner join sdidata sd on 
    sdi.keyid1 = sd.keyid1 (... more column restrictions) 
and sdi.dataset = sd.dataset 
where sd.sdidataid in (select top 30 sdidataid from sdidata) 
and sdi.u_analysserieid is null 
order by sd.sdidataid asc

我可以问你魔术的目的吗这是一个与现实相去甚远的人为示例:我将使用它从我的代码UGLYEWWWW中的数组中获取值。。。但你必须做你必须做的,对吗?如果你想在你丑陋的代码上有一个不同的外观,我很乐意:所以如果你提供更大的图片,而不是全部,我们可能会让你走上一条不同的道路:-@danihp-他说他希望每3个部门的价值都能增加。我就是这么做的。您的值将每三行递增一次,而不是每三行递增一次departments@oskbor-向您展示查询,我如何知道它有什么问题。这是真正失败的查询:选择sdidata.sdidataid行\ U编号按sdidata.sdidataid asc排序,从sdidataitem中选择1/3分区,sdidata,其中sdidataitem.keyid1=sdidata.keyid1。。。更多列限制和sdidataitem.dataset=sdidata.dataset和sdidata.sdidataid在从sdidata和sdidataitem.u_中选择前30个sdidataid中按sdidata和sdidataitem.u分析IEID的顺序为空。sdidataid asc无法找到列sdidata或用户定义的函数或聚合sdidata.sdidataid,或者名称不明确。@oskbor查询是否在从sdidata条件中选择前30个sdidataid时使用行\号而不使用此sd.sdidataid?如果是,请在从sdidata sd2中选择前30个sdidataid中为子查询sd.sdidataid添加别名