2016-11-23 2 views
0

Я следующий запросSQL Server 2008, как я могу сделать подзапрос этого запроса

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 

Но по какой-то причине он не работает, как ожидалось, по какой-то причине, она возвращается

+------------+-------------+-----------------+----------+---------+------------------+-------------------------+-------------------------+---------------------------------------------------+-------------------------+ 
| 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 | 
+------------+-------------+-----------------+----------+---------+------------------+-------------------------+-------------------------+---------------------------------------------------+-------------------------+ 

, но это действительно должно быть возвращение 1 ряд

| 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 | 

Моя думаю, это потому, что обе колонки (F_entrada и F_Salida), так что де чтобы присоединиться к ним в столбце «Fecha» (последний), и теперь я хочу отфильтровать данные по столбцу «Fecha», но я не знаю, как это сделать.

Благодарим за помощь.

+1

'выбрать * из (myquery) T' является основным способом положить что-то в подзапрос (хотя нужно Youd вынуть' заказ by' части). Из интереса, есть ли какая-то особая причина, почему ваши предложения выглядят так? Вам не нужно преобразовывать '20161031' в datetime ... – ZLK

+0

Мне ваш запрос возвращает ожидаемый результат. Каковы ваши критерии поиска? Чего вы хотите достичь? – ydoow

+0

Спасибо за ваш быстрый ответ! Когда я начал улучшать эту систему, мои запросы не работали, если я использовал («yyyyMMdd»), поэтому мне пришлось конвертировать. Я удалю его и проверю, работает ли он сейчас. Еще раз спасибо за вашу помощь! –

ответ

1

У вас есть 2 варианта здесь:

  1. Добавьте (CASE WHEN...) заявление в пункте where как этот

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

  2. Wrap существующий оператор выбора в качестве суб-запроса, который вычисляет fecha, то вы можете использовать fecha во внешнем запросе. как этот

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

Не понял первый вариант, но второй работал, спасибо! –

Смежные вопросы