2013-08-14 1 views
1

Использование SQL Server Manager 2008 простой и быстрый один, Получили этот запрос:SQl имеющий пункт Min метод недействителен

SELECT sizecode as smaller 
from safestore.dbo.SpaceMan_EvoPrices 
WHERE SiteId = 'derp' AND Publish = 'Y' AND SizeCode = 'herp' 
HAVING PhysicalSize < MIN(PhysicalSize) 

является недействительным в HAVING предложении, поскольку он не содержится ни в статистической функции или GROUP BY. Добавил группу, но не уверен, как добавить ее в предложение group by. Как вы можете сказать, я никогда не пользовался До сих пор.

Любые мысли?

EDIT:

этот запрос является оригинальным им запрос пытается сократить в качестве своей головной боли, чтобы посмотреть на:

SELECT TOP 1 (SELECT TOP 1 Sizecode 
FROM [safestore].[dbo].[SpaceMan_EvoPrices] 
WHERE PhysicalSize < (SELECT TOP 1 PhysicalSize FROM [safestore].[dbo]. [SpaceMan_EvoPrices] WHERE SiteId = 'derp' AND Publish = 'Y' AND SizeCode = 'herp') 
AND SiteId = 'derp' 
ORDER BY PhysicalSize DESC) AS Smaller, 
(SELECT TOP 1 Sizecode 
FROM [safestore].[dbo].[SpaceMan_EvoPrices] 
WHERE PhysicalSize > (SELECT TOP 1 PhysicalSize FROM [safestore].[dbo]. [SpaceMan_EvoPrices] WHERE SiteId = 'derp' AND Publish = 'Y' AND SizeCode = 'herp') 
AND SiteId = 'derp' 
ORDER BY PhysicalSize) AS Larger 
FROM [safestore].[dbo].[SpaceMan_EvoPrices] 
+2

Помимо аспекта запроса. Как что-то может быть меньше его минимума? – Pleun

+1

Вы собираетесь сравнить его с минимальным значением для всей негруппированной таблицы? –

+0

плохое обновление для объяснения, запрос выполнен до сих пор, так что логика отсутствует на данный момент – lemunk

ответ

1

Попробуйте один -

;WITH cte AS (
    SELECT PhysicalSize, Publish, SizeCode 
    FROM dbo.SpaceMan_EvoPrices 
    WHERE SiteId = 'derp' 
) 
SELECT 
     Smaller = (
     SELECT TOP 1 Sizecode 
     FROM cte 
     WHERE PhysicalSize < t.PhysicalSize 
     ORDER BY PhysicalSize DESC 
    ) 
    , Larger = (
     SELECT TOP 1 Sizecode 
     FROM cte 
     WHERE PhysicalSize > t.PhysicalSize 
     ORDER BY PhysicalSize 
    ) 
FROM (
    SELECT TOP 1 PhysicalSize 
    FROM cte 
    WHERE Publish = 'Y' 
     AND SizeCode = 'herp' 
) t 
1

, насколько ваш запрос обеспокоен. она должна быть, как это

SELECT sizecode as smaller,PhysicalSize 
from safestore.dbo.SpaceMan_EvoPrices 
WHERE SiteId = '080P2DDK120820090001' AND Publish = 'Y' AND SizeCode = '50SA' 
Group by PhysicalSize 
HAVING PhysicalSize < MIN(PhysicalSize) --not sure y this line 
Смежные вопросы