Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为订购的月份创建分类_Sql_Sql Server_Date - Fatal编程技术网

Sql 为订购的月份创建分类

Sql 为订购的月份创建分类,sql,sql-server,date,Sql,Sql Server,Date,我正试图在查询中创建一列,以显示相对于日期的有序分类(显示1、2、3(如第一、第二、第三…)。。。在我当前的查询中,我过滤了过去12个月的数据(例如,从2016年9月1日到2017年8月31日) 使用DATEADD(mm;DATEDIFF(m;-1;GETDATE())-12;0) 第一次约会 DATEADD(s;-1;DATEADD(mm;DATEDIFF(m;0;GETDATE())+1;0)) 当前月份的最后一天。我还有两列,一列是月份,另一列是年份,都是从数据中的文档日期列中提取的(我使

我正试图在查询中创建一列,以显示相对于日期的有序分类(显示1、2、3(如第一、第二、第三…)。。。在我当前的查询中,我过滤了过去12个月的数据(例如,从2016年9月1日到2017年8月31日)

使用
DATEADD(mm;DATEDIFF(m;-1;GETDATE())-12;0)

第一次约会

DATEADD(s;-1;DATEADD(mm;DATEDIFF(m;0;GETDATE())+1;0))

当前月份的最后一天。我还有两列,一列是月份,另一列是年份,都是从数据中的文档日期列中提取的(我使用

月(dbo.Mov\u Venda\u Cab.dtmData)
年(dbo.Mov\u Venda\u Cab.dtmData))

我的目标是有一个专栏,展示如下内容:

如果该月是间隔的第一个月(如果是第9个月和2016年),则必须显示1,如果是第二个月(第10个月和2016年),则显示2,全部连续到当前月份(即2017年第8个月)并显示12

如果这些值是静态的,我可以做一个简单的例子,并将实现我想要的。我的问题是,当我得到按当前日期和延迟12个月过滤的数据时,我无法得到相同的结果,因为我不知道在CASE表达式中应该做什么

因此,它可以帮助我的专栏:

Item ; Qty ; Month ; Year ; dtmData ; orderedMonth
原始查询:

SELECT DISTINCT DATEADD(mm, DATEDIFF(m, - 1, GETDATE()) - 12, 0)                            AS DATA_INI,
  DATEADD(s,                            - 1, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0)) AS DATA_FIM,
  dbo.Mov_Venda_Lin.Id,
  MONTH(dbo.Mov_Venda_Cab.dtmData)                                      AS Mes,
  YEAR(dbo.Mov_Venda_Cab.dtmData)                                       AS Ano,
  dbo.Mov_Venda_Lin.fltValorMercadoriaSIVA * dbo.Mov_Venda_Cab.intSinal AS Mercadoria,
  dbo.Mov_Venda_Lin.fltValorLiquido        * dbo.Mov_Venda_Cab.intSinal AS ValorLiquido,
  CASE
    WHEN tbl_tipos_documentos.bitconsideraqtdmapas = 1
    THEN (Mov_Venda_Lin.fltQuantidade * mov_venda_cab.intsinal)
    ELSE 0
  END                                      AS Quantidade,
  dbo.Mov_Venda_Lin.strCodSeccao           AS Seccao,
  dbo.Mov_Venda_Lin.strAbrevTpDoc          AS TpDoc,
  dbo.Tbl_Tipos_Documentos.strDescricao    AS DescTpDoc,
  dbo.Mov_Venda_Lin.intNumLinha            AS Linha,
  dbo.Mov_Venda_Lin.strCodExercicio        AS Exercicio,
  dbo.Mov_Venda_Cab.strAbrevMoeda          AS Moeda,
  dbo.Mov_Venda_Cab.fltCambio              AS Cambio,
  dbo.Mov_Venda_Lin.strCodArtigo           AS Artigo,
  dbo.Tbl_Gce_Artigos.strDescricao         AS DescArtigo,
  dbo.Mov_Venda_Lin.strCodClassMovStk      AS MovStk,
  dbo.Tbl_ClassificacaoMovStk.strDescricao AS DescMovStk,
  CASE
    WHEN mov_venda_cab.inttpentidade = 0
    THEN tbl_gce_tipos_entidade.strcodigo
    ELSE NULL
  END AS TpEntidade,
  CASE
    WHEN mov_venda_cab.inttpentidade = 0
    THEN tbl_gce_tipos_entidade.strdescricao
    ELSE NULL
  END AS DescTpEntidade,
  CASE
    WHEN mov_venda_cab.intcodentidade <> 0
    THEN mov_venda_cab.intcodentidade
    ELSE NULL
  END AS CodEntidade,
  CASE
    WHEN mov_venda_cab.inttpentidade  = 0
    AND mov_venda_cab.intcodentidade <> 0
    THEN 'Cliente'
    WHEN mov_venda_cab.inttpentidade  = 1
    AND mov_venda_cab.intcodentidade <> 0
    THEN 'Outro Devedor'
    ELSE NULL
  END AS TipoEntidade,
  CASE
    WHEN mov_venda_cab.inttpentidade = 0
    THEN tbl_clientes.strnome
    ELSE tbl_outros_devedores.strnome
  END                                    AS DescNome,
  dbo.Tbl_SubZonas.strAbrevZona          AS Zona,
  dbo.Tbl_Zonas.strDescricao             AS DescZona,
  dbo.Mov_Venda_Cab.strAbrevSubZona      AS SubZona,
  dbo.Tbl_SubZonas.strDescricao          AS DescSubZona,
  dbo.Mov_Venda_Cab.intCodVendedor       AS Vendedor,
  dbo.Tbl_Gce_Vendedores.strNome         AS DescNomeVend,
  dbo.Tbl_Gce_Artigos.strCodCategoria    AS Categoria,
  dbo.Tbl_Gce_Categorias.strDescricao    AS DescCategoria,
  dbo.Tbl_Gce_Artigos.strTpArtigo        AS TpArtigo,
  dbo.Tbl_Gce_Tipos_Artigos.strDescricao AS DescTpArtigo,
  CAST(NULL AS VARCHAR(13))              AS CodFamiliaAgrup,
  CAST(NULL AS VARCHAR(35))              AS DescFamAgrup,
  CAST(NULL AS VARCHAR(13))              AS CodFamiliaRes,
  CAST(NULL AS VARCHAR(35))              AS DescFamRes,
  dbo.Mov_Venda_Cab.strForteAbrevMoeda   AS abrevmoeda,
  dbo.Mov_Venda_Cab.fltForteCambio       AS fortecambio
FROM dbo.Mov_Venda_Lin WITH (NOLOCK)
LEFT OUTER JOIN dbo.Mov_Venda_Cab WITH (NOLOCK)
  ON dbo.Mov_Venda_Lin.strCodSeccao     = dbo.Mov_Venda_Cab.strCodSeccao
  AND dbo.Mov_Venda_Lin.strAbrevTpDoc   = dbo.Mov_Venda_Cab.strAbrevTpDoc
  AND dbo.Mov_Venda_Lin.strCodExercicio = dbo.Mov_Venda_Cab.strCodExercicio
  AND dbo.Mov_Venda_Lin.intNumero       = dbo.Mov_Venda_Cab.intNumero
LEFT OUTER JOIN dbo.Tbl_Gce_Armazens WITH (NOLOCK)
  ON dbo.Mov_Venda_Lin.strCodArmazem = dbo.Tbl_Gce_Armazens.strCodigo
LEFT OUTER JOIN dbo.Tbl_Gce_Artigos WITH (NOLOCK)
  ON dbo.Tbl_Gce_Artigos.strCodigo = dbo.Mov_Venda_Lin.strCodArtigo
LEFT OUTER JOIN dbo.Tbl_Gce_ArtigosFamilias WITH (NOLOCK)
  ON dbo.Tbl_Gce_Artigos.strCodigo = dbo.Tbl_Gce_ArtigosFamilias.strCodArtigo
LEFT OUTER JOIN dbo.Tbl_Gce_Familias WITH (NOLOCK)
  ON dbo.Tbl_Gce_ArtigosFamilias.strCodFamilia = dbo.Tbl_Gce_Familias.strCodigo
LEFT OUTER JOIN dbo.Tbl_Gce_ArtigosReferencias WITH (NOLOCK)
  ON dbo.Tbl_Gce_Artigos.strCodigo = dbo.Tbl_Gce_ArtigosReferencias.strCodArtigo
LEFT OUTER JOIN dbo.Tbl_Gce_Referencias WITH (NOLOCK)
  ON dbo.Tbl_Gce_ArtigosReferencias.strCodReferencia = dbo.Tbl_Gce_Referencias.strCodigo
LEFT OUTER JOIN dbo.Tbl_Gce_Tipos_Artigos WITH (NOLOCK)
  ON dbo.Tbl_Gce_Artigos.strTpArtigo = dbo.Tbl_Gce_Tipos_Artigos.strCodigo
LEFT OUTER JOIN dbo.Tbl_Clientes WITH (NOLOCK)
  ON dbo.Mov_Venda_Cab.intCodEntidade = dbo.Tbl_Clientes.intCodigo
LEFT OUTER JOIN dbo.Tbl_Direccoes WITH (NOLOCK)
  ON dbo.Mov_Venda_Cab.intCodEntidade = dbo.Tbl_Direccoes.intCodigo
  AND dbo.Mov_Venda_Cab.intDireccao   = dbo.Tbl_Direccoes.intNumero
  AND dbo.Mov_Venda_Cab.intTpEntidade = dbo.Tbl_Direccoes.intTp_Entidade
LEFT OUTER JOIN dbo.Tbl_Outros_Devedores WITH (NOLOCK)
  ON dbo.Mov_Venda_Cab.intCodEntidade = dbo.Tbl_Outros_Devedores.intCodigo
LEFT OUTER JOIN dbo.Tbl_Gce_Vendedores WITH (NOLOCK)
  ON dbo.Mov_Venda_Cab.intCodVendedor = dbo.Tbl_Gce_Vendedores.intCodigo
LEFT OUTER JOIN dbo.Tbl_Tipos_Documentos WITH (NOLOCK)
  ON dbo.Mov_Venda_Cab.strAbrevTpDoc = dbo.Tbl_Tipos_Documentos.strAbreviatura
LEFT OUTER JOIN dbo.Tbl_SubZonas WITH (NOLOCK)
  ON dbo.Mov_Venda_Cab.strAbrevSubZona = dbo.Tbl_SubZonas.strAbreviatura
LEFT OUTER JOIN dbo.Tbl_Zonas WITH (NOLOCK)
  ON dbo.Tbl_SubZonas.strAbrevZona = dbo.Tbl_Zonas.strAbreviatura
LEFT OUTER JOIN dbo.Tbl_Gce_Categorias WITH (NOLOCK)
  ON dbo.Tbl_Gce_Artigos.strCodCategoria = dbo.Tbl_Gce_Categorias.strCodigo
LEFT OUTER JOIN dbo.Tbl_Gce_Seccoes WITH (NOLOCK)
  ON dbo.Mov_Venda_Cab.strCodSeccao = dbo.Tbl_Gce_Seccoes.strCodigo
LEFT OUTER JOIN dbo.Tbl_Gce_Tipos_Entidade WITH (NOLOCK)
  ON dbo.Tbl_Clientes.strTpEntidade = dbo.Tbl_Gce_Tipos_Entidade.strCodigo
LEFT OUTER JOIN dbo.Tbl_ClassificacaoMovStk WITH (NOLOCK)
  ON dbo.Mov_Venda_Lin.strCodClassMovStk = dbo.Tbl_ClassificacaoMovStk.strCodigo
WHERE (dbo.Mov_Venda_Cab.intTpEntidade = 0
  OR dbo.Mov_Venda_Cab.intTpEntidade    IS NULL)
  AND (dbo.Mov_Venda_Cab.strAbrevTpDoc                            IN ('CRFCX', 'FACIV', 'FACTC', 'FCTA', 'LANIV', 'LOFX', 'LONC', 'LXANI', 'NCFCX', 'NFACC', 'NFACE', 'NFACM', 'NFACT', 'NNCRC', 'NNCRE', 'NNCRM', 'NNDEB', 'NNDEC', 'NNDEV', 'NVDIC', 'NVDIN', 'XLACC', 'XLACD'))
  AND (dbo.Mov_Venda_Cab.strCodSeccao                             IN ('1', 'ENCT1', 'ENCT2', 'ENCT3', 'ENCT4', 'ENCT5', 'ENCT6'))
  AND (dbo.Mov_Venda_Cab.dtmData         > DATEADD(mm, DATEDIFF(m, - 1, GETDATE()) - 12, 0))
  AND (dbo.Mov_Venda_Cab.dtmData        <= DATEADD(s,              - 1, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0)))
  AND (dbo.Mov_Venda_Lin.intTpLinha      > 2)
  AND (dbo.Mov_Venda_Cab.bitAnulado      = 0)
  AND (dbo.Mov_Venda_Cab.bitConvertido   = 0) 
选择DISTINCT DATEADD(mm,DATEDIFF(m,-1,GETDATE())-12,0)作为数据INI,
DATEADD(s,-1,DATEADD(mm,DATEDIFF(m,0,GETDATE())+1,0))作为数据,
dbo.Mov_Venda_Lin.Id,
月(dbo.Mov_Venda_Cab.dtmData)作为Mes,
年份(dbo.Mov_Venda_Cab.dtmData)作为年份,
dbo.Mov_Venda_Lin.fltValorMercadoriaSIVA*dbo.Mov_Venda_Cab.intSinal AS Mercadoria,
dbo.Mov_Venda_Lin.fltValorLiquido*dbo.Mov_Venda_Cab.intSinal AS ValorLiquido,
案例
当tbl_tipos_documentos.bitconsideraqtdmapas=1时
然后(Mov_Venda_Lin.fltQuantidade*Mov_Venda_cab.intsinal)
其他0
以Quantidade结尾,
作为第三方,第三方为第三方,
dbo.Mov_Venda_Lin.Strabrevtoc作为TpDoc,
dbo.Tbl_Tipos_Documentos.strDescricao作为描述文件,
以林哈的身份,在林荫大道上行走,
作为行使人的债务,
dbo.Mov_Venda_Cab.strAbrevMoeda作为Moeda,
dbo.Mov_Venda_Cab.fltCambio作为Cambio,
作为Artigo的strCodArtigo,
dbo.Tbl_Gce_Artigos.strDescricao作为DescArtigo,
dbo.Mov_Venda_Lin.strCodClassMovStk作为MovStk,
dbo.Tbl_classificacomovstk.strDescricao作为说明,
案例
当mov_venda_cab.inttpentidade=0时
然后tbl_gce_tipos_entidade.strcodigo
否则无效
以TpEntidade结尾,
案例
当mov_venda_cab.inttpentidade=0时
然后tbl_gce_tipos_entidade.strdescricao
否则无效
以DescTpEntidade结尾,
案例
当mov_venda_cab.intcodentidade 0
然后是mov_venda_cab.intcodentidade
否则无效
以CodEntidade结尾,
案例
当mov_venda_cab.inttpentidade=0时
和mov_venda_cab.intcodentidade 0
然后是“客户”
当mov_venda_cab.inttpentidade=1时
和mov_venda_cab.intcodentidade 0
然后是“奥特罗·德维多”
否则无效
以TipoEntidade结尾,
案例
当mov_venda_cab.inttpentidade=0时
然后是tbl_客户
否则,我就不知道了
以笛卡尔命名结束,
dbo.Tbl_亚区。斯特拉布列夫佐纳作为佐纳,
dbo.Tbl_Zonas.strDescricao作为DescZona,
dbo.Mov_Venda_Cab.strAbrevSubZona作为SubZona,
dbo.Tbl_SubZonas.strDescricao作为DescSubZona,
dbo.Mov_Venda_Cab.intcod作为卖方,
dbo.Tbl_Gce_Vendedores.strNome作为名称,
dbo.Tbl_Gce_Artigos.strCodCategoria作为Categoria,
dbo.Tbl_Gce_Categorias.strDescricao作为DescCategoria,
dbo.Tbl_Gce_Artigos.strTpArtigo作为TpArtigo,
dbo.Tbl_Gce_Tipos_Artigos.strDescricao作为描述部分,
强制转换(NULL为VARCHAR(13))为CodFamiliaAgrup,
强制转换(NULL为VARCHAR(35))为DescFamAgrup,
将(空为VARCHAR(13))转换为CodFamilies,
强制转换(NULL为VARCHAR(35))为DescFamRes,
dbo.Mov_Venda_Cab.strForteAbrevMoeda作为abrevmoeda,
dbo.Mov_Venda_Cab.fltForteCambio作为fortecambio
来自dbo.Mov_Venda_Lin和(NOLOCK)
左外连接dbo.Mov\U Venda\U驾驶室(无锁)
在dbo.Mov_Venda_Lin.strCodSeccao=dbo.Mov_Venda_Cab.strCodSeccao上
和dbo.Mov_Venda_Lin.strabrevtpodoc=dbo.Mov_Venda_Cab.strabrevtpodoc
和dbo.Mov_Venda_Lin.strcodexercio=dbo.Mov_Venda_Cab.strcodexercio
和dbo.Mov_Venda_Lin.intNumero=dbo.Mov_Venda_Cab.intNumero
左外连接dbo.Tbl_Gce_Armazens与(NOLOCK)
关于dbo.Mov_Venda_Lin.strCodArmazem=dbo.Tbl_Gce_Armazens.strCodigo
左外连接dbo.Tbl_Gce_Artigos与(NOLOCK)
关于dbo.Tbl_Gce_Artigos.strCodigo=dbo.Mov_Venda_Lin.strCodigo
左外连接dbo.Tbl\U Gce\U ArtigosFamilias与(NOLOCK)
关于dbo.Tbl_Gce_Artigos.strCodigo=dbo.Tbl_Gce_Artigos familias.strCodigo
左外连接dbo.Tbl_Gce_Familias WITH(NOLOCK)
关于dbo.Tbl\u Gce\u ArtigosFamilias.strCodFamilia=dbo.Tbl\u Gce\u Familias.strCodigo
左外连接dbo.Tbl_Gce_artigosreferenceas与(NOLOCK)
关于dbo.Tbl\u Gce\u Artigos.strCodigo=dbo.Tbl\u Gce\u Artigos referenceas.strCodArtigo
左外连接dbo.Tbl\u Gce\u引用(NOLOCK)
关于dbo.Tbl\u Gce\u artigosreferenceas.strcodreferenceia=dbo.Tbl\u Gce\u referenceas.strCodigo
左外连接dbo.Tbl\U Gce\U Tipos\U Artigos与(NOLOCK)
关于dbo.Tbl\u Gce\u Artigos.strTpArtigo=dbo.Tbl\u Gce\u Tipos\u Artigos.strCodigo
左外连接dbo.Tbl_客户与(NOLOCK)
在dbo.Mov_Venda_Cab.intCodEntidade=dbo.Tbl_Clientes.intCodigo上
左外连接dbo.Tbl_Direccoes与(NOL
SELECT 
    *
    ,ordered_output = (ROW_NUMBER()OVER(PARTITION BY grouping_field ORDER BY cast(dtmData as datetime) ASC))
FROM Mov_Venda_Cab
WHERE cast(dtmData as datetime) >= getdate() - 365
grouping_field  dtmData    ordered_output 
1               8/1/2017     1
1               8/2/2017     2
1               8/3/2017     3
2               8/1/2017     1
2               8/2/2017     2
2               8/3/2017     3
dtmData    ordered_output 
8/1/2017     1
8/2/2017     2
8/3/2017     3
8/4/2017     4
8/5/2017     5
8/6/2017     6
SELECT b.*, c.month_rank
from Mov_Venda_Cab as b
inner join
    (select mnt, yr, ROW_NUMBER() OVER(ORDER BY A.yr, A.mnt) AS month_rank
    from (
        SELECT DISTINCT
            MONTH(dtmData) as mnt
            , YEAR(dtmData) as yr
        from Mov_Venda_Cab
        WHERE cast(dtmData as datetime) >= getdate() - 365
        ) as a
    ) as c
on MONTH(b.dtmData) = c.mnt and YEAR(b.dtmData) = c.yr