SQL Server使用视图上的条件进行计数
我需要的是能够在我的视图中添加一列来枚举满足特定条件的记录,现在我正在使用row_number在列NU_中显示具有该条件的行索引SQL Server使用视图上的条件进行计数,sql,sql-server,count,conditional-statements,Sql,Sql Server,Count,Conditional Statements,我需要的是能够在我的视图中添加一列来枚举满足特定条件的记录,现在我正在使用row_number在列NU_中显示具有该条件的行索引 SELECT OT.NU_ORDEN_TRABAJO, OT.FL_PRIORIDAD, OT.DT_ADDROW, OT.USERID, OT.DT_UPDATEROW, OE.CD_UBICACION_ACTUAL, OE.CD_UBICACION_CONFIRMADA, OE.CD_UBICACION_SUGERIDA, OE.NU_ORDEN_ESTIBA
SELECT
OT.NU_ORDEN_TRABAJO,
OT.FL_PRIORIDAD,
OT.DT_ADDROW,
OT.USERID,
OT.DT_UPDATEROW,
OE.CD_UBICACION_ACTUAL,
OE.CD_UBICACION_CONFIRMADA,
OE.CD_UBICACION_SUGERIDA,
OE.NU_ORDEN_ESTIBA,
OE.NU_PLATAFORMA,
P.CD_ETIQUETA,
DT.DS_DESCRIPCION AS DS_DESCRIPCION_ESTADO,
DT2.DS_DESCRIPCION AS DS_DESCRIPCION_TIPO,
case when DT.DS_DESCRIPCION = 'Pendiente' then
ROW_NUMBER() OVER (ORDER BY DT_ADDROW ASC) else -1 end AS NU_COLA
FROM T_ORDEN_TRABAJO AS OT
INNER JOIN
T_ORDEN_ESTIBA AS OE ON
OT.NU_ORDEN_TRABAJO = OE.NU_ORDEN_TRABAJO
INNER JOIN
T_PLATAFORMA AS P ON
P.NU_PLATAFORMA = OE.NU_PLATAFORMA
INNER JOIN
T_DOMINIO_DET AS DT ON
OT.ND_ESTADO_ORDEN_TRABAJO = DT.NU_DOMINIO
INNER JOIN
T_DOMINIO_DET AS DT2 ON
OT.ND_ORDEN_TRABAJO = DT2.NU_DOMINIO
这给了我类似的东西:
NU_COLA
-1
-1
-1
4
-1
6
我需要这个:
NU_COLA
-1
-1
-1
1
-1
2
有什么想法吗?一个简单的解决方案是将查询拆分为两个单独的查询并将它们合并在一起,顶部的查询处理DT.DS_description='Pendiente'的行数,第二个是DT.DS_description不等于'Pendiente'的情况:
SELECT
OT.NU_ORDEN_TRABAJO,
OT.FL_PRIORIDAD,
OT.DT_ADDROW,
OT.USERID,
OT.DT_UPDATEROW,
OE.CD_UBICACION_ACTUAL,
OE.CD_UBICACION_CONFIRMADA,
OE.CD_UBICACION_SUGERIDA,
OE.NU_ORDEN_ESTIBA,
OE.NU_PLATAFORMA,
P.CD_ETIQUETA,
DT.DS_DESCRIPCION AS DS_DESCRIPCION_ESTADO,
DT2.DS_DESCRIPCION AS DS_DESCRIPCION_TIPO,
case when DT.DS_DESCRIPCION = 'Pendiente' then
ROW_NUMBER() OVER (ORDER BY DT_ADDROW ASC) AS NU_COLA
FROM T_ORDEN_TRABAJO AS OT
INNER JOIN
T_ORDEN_ESTIBA AS OE ON
OT.NU_ORDEN_TRABAJO = OE.NU_ORDEN_TRABAJO
INNER JOIN
T_PLATAFORMA AS P ON
P.NU_PLATAFORMA = OE.NU_PLATAFORMA
INNER JOIN
T_DOMINIO_DET AS DT ON
OT.ND_ESTADO_ORDEN_TRABAJO = DT.NU_DOMINIO
INNER JOIN
T_DOMINIO_DET AS DT2 ON
OT.ND_ORDEN_TRABAJO = DT2.NU_DOMINIO
WHERE DT.DS_DESCRIPCION = 'Pendiente'
UNION
SELECT
OT.NU_ORDEN_TRABAJO,
OT.FL_PRIORIDAD,
OT.DT_ADDROW,
OT.USERID,
OT.DT_UPDATEROW,
OE.CD_UBICACION_ACTUAL,
OE.CD_UBICACION_CONFIRMADA,
OE.CD_UBICACION_SUGERIDA,
OE.NU_ORDEN_ESTIBA,
OE.NU_PLATAFORMA,
P.CD_ETIQUETA,
DT.DS_DESCRIPCION AS DS_DESCRIPCION_ESTADO,
DT2.DS_DESCRIPCION AS DS_DESCRIPCION_TIPO,
case when DT.DS_DESCRIPCION = 'Pendiente' then
-1 AS NU_COLA
FROM T_ORDEN_TRABAJO AS OT
INNER JOIN
T_ORDEN_ESTIBA AS OE ON
OT.NU_ORDEN_TRABAJO = OE.NU_ORDEN_TRABAJO
INNER JOIN
T_PLATAFORMA AS P ON
P.NU_PLATAFORMA = OE.NU_PLATAFORMA
INNER JOIN
T_DOMINIO_DET AS DT ON
OT.ND_ESTADO_ORDEN_TRABAJO = DT.NU_DOMINIO
INNER JOIN
T_DOMINIO_DET AS DT2 ON
OT.ND_ORDEN_TRABAJO = DT2.NU_DOMINIO
WHERE DT.DS_DESCRIPCION <> 'Pendiente'
您可以按以下方式更改查询:
CASE WHEN DT.DS_DESCRIPCION = 'Pendiente' then
ROW_NUMBER() OVER (ORDER BY case when DT.DS_DESCRIPCION = 'Pendiente' then DT_ADDROW else 'ZZZzzz' end ASC) else -1 end AS NU_COLA
为了帮助你,我们需要更多的信息。我们需要为涉及的表创建语句。它们不需要包含所有字段,但应该包含所有相关字段。其次,我们需要测试数据,最好是以INSERT语句的形式,这样,如果我们使用测试数据和您现有的代码,我们就可以得到您的结果。这将给我们一个更好的机会去理解如何改变它,去得到你想要的。我怀疑排号不是你需要的!提供背后的业务逻辑和示例数据,以便我们可以帮助您。