2016-11-23 2 views
0

Ich habe die folgende AbfrageSQL Server 2008, wie kann ich eine Unterabfrage dieser Abfrage

select 
    coalesce(NULLIF(No_Parte,' '), NULLIF(OEM,' '), Num_serie) as Producto, 
    Id_Sucursal, Tipo_Movimiento, Cantidad, Costo,No_Servicio, 
    F_Entrada, F_Salida, Observaciones, 
    (case 
     when F_Entrada > F_Salida 
      then F_Entrada 
      else F_Salida 
    end) as Fecha 
from 
    Kardex_Producto 
where 
    Id_Sucursal = 'tehuacan' 
    and ((F_Entrada >= CONVERT(DateTime, '20161031', 103) OR F_Salida >= CONVERT(DateTime, '20161031', 103)) 
    and (F_Entrada <= CONVERT(DateTime, '20161031', 103) OR F_Salida <= CONVERT(DateTime, '20161031', 103))) --and Tipo_Movimiento='S-' 
order by 
    Tipo_Movimiento, No_Servicio 

Aber aus irgendeinem Grund, es nicht wie erwartet funktioniert, aus irgendeinem Grund ist es

+------------+-------------+-----------------+----------+---------+------------------+-------------------------+-------------------------+---------------------------------------------------+-------------------------+ 
| Producto | Id_Sucursal | Tipo_Movimiento | Cantidad | Costo | No_Servicio |  F_Entrada  |  F_Salida   |     Observaciones     |   Fecha   | 
+------------+-------------+-----------------+----------+---------+------------------+-------------------------+-------------------------+---------------------------------------------------+-------------------------+ 
| 1TU3CWH | TEHUACAN | E+    | 1.00  |  0 | Traspaso No. 568 | 2016-11-11 19:19:43.447 | 1900-01-01 00:00:00.000 |             | 2016-11-11 19:19:43.447 | 
| 23651  | TEHUACAN | E+    | 1.00  |  0 | Traspaso No. 569 | 2016-11-14 12:29:21.663 | 1900-01-01 00:00:00.000 |             | 2016-11-14 12:29:21.663 | 
| 37035  | TEHUACAN | E+    | 2.00  |  0 | Traspaso No. 569 | 2016-11-14 12:29:20.657 | 1900-01-01 00:00:00.000 |             | 2016-11-14 12:29:20.657 | 
| 39657  | TEHUACAN | E+    | 2.00  |  0 | Traspaso No. 569 | 2016-11-14 12:29:19.403 | 1900-01-01 00:00:00.000 |             | 2016-11-14 12:29:19.403 | 
| 37069  | TEHUACAN | E+    | 6.00  |  0 | Traspaso No. 571 | 2016-11-17 15:29:30.147 | 1900-01-01 00:00:00.000 |             | 2016-11-17 15:29:30.147 | 
| 37282  | TEHUACAN | E+    | 1.00  |  0 | Traspaso No. 571 | 2016-11-17 15:29:29.503 | 1900-01-01 00:00:00.000 |             | 2016-11-17 15:29:29.503 | 
| 37069  | TEHUACAN | S-    | 1.00  |  0 | 0000000002368 | 1900-01-01 00:00:00.000 | 2016-10-31 18:07:05.880 | Venta de Mostrador con numero de ticket indicado. | 2016-10-31 18:07:05.880 | 
| 44259  | TEHUACAN | S-    | 1.00  |  0 | 0000000002369 | 1900-01-01 00:00:00.000 | 2016-11-03 15:59:39.307 | Venta de Mostrador con numero de ticket indicado. | 2016-11-03 15:59:39.307 | 
| 37069  | TEHUACAN | S-    | 1.00  |  0 | 0000000002370 | 1900-01-01 00:00:00.000 | 2016-11-04 11:07:04.713 | Venta de Mostrador con numero de ticket indicado. | 2016-11-04 11:07:04.713 | 
| 39510  | TEHUACAN | S-    | 1.00  |  0 | 0000000002370 | 1900-01-01 00:00:00.000 | 2016-11-04 11:07:05.553 | Venta de Mostrador con numero de ticket indicado. | 2016-11-04 11:07:05.553 | 
| 302H493011 | TEHUACAN | S-    | 1.00  |  0 | 0000000002371 | 1900-01-01 00:00:00.000 | 2016-11-04 20:07:17.730 | Venta de Mostrador con numero de ticket indicado. | 2016-11-04 20:07:17.730 | 
+------------+-------------+-----------------+----------+---------+------------------+-------------------------+-------------------------+---------------------------------------------------+-------------------------+ 
Rückkehr

aber es sollte wirklich 1 Reihe

| 37069  | TEHUACAN | S-    | 1.00  | 180.00 | 0000000002368 | 1900-01-01 00:00:00.000 | 2016-10-31 18:07:05.880 | Venta de Mostrador con numero de ticket indicado. | 2016-10-31 18:07:05.880 | 

Meine Vermutung zurückkehren es ist, weil beide Säulen (F_entrada und F_Salida), so dass ich de um sie auf der Spalte Fecha (die letzte) zu "verbinden", und jetzt möchte ich die Daten durch die Spalte "Fecha" filtern, aber ich weiß nicht, wie es geht.

Vielen Dank für Ihre Hilfe.

+1

'select * from (MyQuery) t' die grundlegende Art und Weise ist etwas in einer Unterabfrage zu setzen (obwohl youd die' um by' Teil nehmen müssen). Gibt es aus Interesse einen besonderen Grund, warum Ihre Wo-Klauseln so aussehen? Sie sollten "20161031" nicht in ein Datum-Uhrzeit-Format konvertieren müssen ... – ZLK

+0

Für mich gibt Ihre Abfrage das erwartete Ergebnis zurück. Was sind deine Suchkriterien? Was willst du erreichen? – ydoow

+0

Vielen Dank für Ihre schnelle Antwort! Als ich begann, dieses System zu verbessern, funktionierten meine Abfragen nicht, wenn ich ('JJJJMMTT') verwendete, deshalb musste ich konvertieren. Ich werde es löschen und prüfen, ob es jetzt funktioniert. Nochmals vielen Dank für Ihre Hilfe! –

Antwort

1

Sie haben 2 Möglichkeiten:

  1. zum where Klausel die (CASE WHEN...) Anweisung hinzufügen, ähnliche

    WHERE Id_Sucursal='tehuacan' AND (case when F_Entrada>F_Salida then F_Entrada else F_Salida end) <= CONVERT(DateTime, '20161031', 103)

  2. Wickeln Sie Ihre bestehende select-Anweisung als Abfrage Unter, dass die berechnet Fecha dann können Sie Fecha in der äußeren Abfrage verwenden. wie diese

SELECT * FROM ( select coalesce(NULLIF(No_Parte,' '), NULLIF(OEM,' '),Num_serie) as Producto, Id_Sucursal, Tipo_Movimiento, Cantidad, Costo,No_Servicio, F_Entrada, F_Salida, Observaciones, (case when F_Entrada>F_Salida then F_Entrada else F_Salida end) as Fecha from Kardex_Producto ) as product WHERE Id_Sucursal='tehuacan' AND Fecha <= CONVERT(DateTime, '20161031', 103) order by Tipo_Movimiento, No_Servicio

+0

Ich habe die erste Option nicht verstanden, aber die zweite funktionierte, danke! –