2017-08-06 6 views
0

必要なのは、特定の条件を満たすレコードを列挙するビューを列に追加することです。今はrow_number()を使用して表示します列NU_COLAは条件付きの行インデックスです。SQL Serverはビューの条件を数えます

NU_COLA 
-1 
-1 
-1 
4 
-1 
6 

そして、私はこの必要があります:

NU_COLA 
-1 
-1 
-1 
1 
-1 
2 

任意のアイデアを私にこのような何かを与える

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 

+0

あなたを助けるために、我々はこれよりもはるかに多くの情報を必要としています。関係するテーブルの作成ステートメントが必要です。すべてのフィールドを含める必要はありませんが、すべての関連フィールドを持つ必要があります。第2に、テストデータと理想的にはINSERT文の形式が必要です。テストデータと既存のコードを使用すると結果が得られます。それは、私たちに、あなたが望むものを得るために、それを変える方法を理解するより良い機会を与えるだろう。私の疑惑はROW_NUMBER()があなたが必要としているものではないということです! –

+0

私たちがお手伝いできるように、ビジネスロジックとサンプルデータを提供してください。 –

答えて

1

単純な解決策は、問合せを2つの別々の問合せに分割し、それらを一緒に結合することです。最上位の問合せは、DT.DS_DESCRIPCION = 'Pendiente'のrow_numberを処理し、2番目はDT.DS_DESCRIPCIONが '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' 
+0

ty!それは完璧に動作します! –

0

あなたは以下のようにクエリを変更することができます。

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