1

SQL server Manager 2008 クイック シンプル マネージャーを使用して、次のクエリを取得しました。

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

集計関数にも GROUP BY 句にも含まれていないため、HAVING 句では無効です。group by を追加しましたが、それを group by 句に追加して有効にする方法がわかりません。お分かりのように、私は今まで Having を使用したことがありません。

何かご意見は?

編集:

このクエリは、見て頭が痛いので短縮しようとしている元のクエリです。

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

2 に答える 2

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
于 2013-08-14T16:01:38.740 に答える
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
于 2013-08-15T05:52:34.197 に答える