2017-01-12 4 views
1

У меня есть таблица, как показано на рисунке ниже: enter image description here Запрос 1:Как объединить 2 запросов SQL в один

Select MIN(SaleStartDate) as MinSaleDate 
from Sales 
where LessonID=1 and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleStartDate) > 0) 

Результат: 2017-02-10 (гггг-мм-дд)

Запрос 2:

Select MAX(SaleEndDate) as MaxSaleDate 
from Sales 
where LessonID=1 and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleEndDate) < 0) 

Результат: 2017-01-02 (гггг-мм-дд)

Я хочу показать 2 результатов с только один запрос. Пожалуйста, помогите мне! Спасибо каждому телу!

+0

'выбрать макс(), мин() ...'? – jarlh

+0

он возвращает NULL. 2 where clause is difference, ande 2 результат, который я получаю, является результатом двух разностных записей :( –

+0

Вам нужны оба результата в одной строке или в разных строках? –

ответ

1

Если вам нужны оба результата в одном ряду:

Select 
(
Select MIN(SaleStartDate) as MinSaleDate 
from Sales 
where LessonID=1 
and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleStartDate) > 0) 
), 
(
Select MAX(SaleEndDate) as MaxSaleDate 
from Sales 
where LessonID=1 
and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleEndDate) < 0) 
) 

Если вам нужен результат в разных строках использовать UNION:

Select 
(
Select MIN(SaleStartDate) as MinSaleDate 
from Sales 
where LessonID=1 
and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleStartDate) > 0) 
) UNION 
(
Select MAX(SaleEndDate) as MaxSaleDate 
from Sales 
where LessonID=1 
and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleEndDate) < 0) 
) 
+0

Спасибо! Это легко! :)) –

2

просто поставить как на выбор так:

Select MIN(SaleStartDate) as MinSaleDate, 
     MAX(SaleEndDate) as MaxSaleDate 
    from Sales 
where LessonID=1 and (DATEDIFF(day, 
           CONVERT (char(10), 
             GETDATE(), 
             126), 
           Sales.SaleStartDate) > 0) 
+0

my 'where' clause есть разница –

1

Для вашего конкретного случая, вы можете просто использовать CROSS JOIN, чтобы получить результат

SELECT MinSaleDate, MaxSaleDate 
FROM 
(
    Select MIN(SaleStartDate) as MinSaleDate 
    from Sales 
    where LessonID = 1 and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleStartDate) > 0) 
), 
(
    Select MAX(SaleEndDate) as MaxSaleDate 
    from Sales 
    where LessonID = 1 and (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleEndDate) < 0) 
); 

Для общего случая можно использовать:

SELECT 
    MIN(CASE WHEN (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleStartDate) > 0 
      THEN SaleStartDate END) AS MinSaleDate, 
    MAX(CASE WHEN (DATEDIFF(day, CONVERT (char(10), GETDATE(), 126), Sales.SaleEndDate) < 0 
      THEN SaleEndDate END) AS MaxSaleDate 
from Sales 
where LessonID = 1; 
+1

Запрос выражения для случая - это путь! – jarlh

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