0

DayInStock目標: 最小 NRを見つけたいCummsold > Balance

クエリは次のとおりです

SELECT TOP (100) PERCENT 
       a.MonthNR
     , a.DayNR
     , a.DayInStock
     , a.CummSold
     , a.WarehouseID
     , a.ItemID
     , a.[Group]
     , a.Balance
     , a.CountryNumber
     , a.Country
  FROM dbo.VW_Critical_01_01 AS a 
  JOIN (SELECT MIN(DayInStock) AS DayInStock
             , MIN(CummSold) AS Cummsold
             , Balance
             , ItemID
             , [Group]
          FROM dbo.VW_Critical_01_01
         WHERE CummSold > Balance
         GROUP BY DayInStock, CummSold, Balance, ItemID, [Group]
      ) AS b 
   ON b.DayInStock = a.DayInStock 
  AND b.ItemID = a.ItemID 
  AND b.[Group] = a.[Group]
ORDER BY a.ItemID, a.DayInStock

クエリは結果として私のものを与えます:

MonthNR DayNR DayInStock CummSold   ItemID   Group  Balance CountryNumber   Country
**2 4   11  2902.492233 100049V3            1   2894    370 Sweden
2   4   11  2902.492233 100049V3            1   2894    280 Norway
2   4   11  2902.492233 100049V3            1   2894    270 Portugal
2   4   11  2902.492233 100049V3            1   2894    460 Finland
2   4   11  2902.492233 100049V3            1   2894    110 Switzerland**

2   5   12  2982.376102 100049V3            1   2894    370 Sweden
2   5   12  2982.376102 100049V3            1   2894    280 Norway
2   5   12  2982.376102 100049V3            1   2894    270 Portugal
2   5   12  2982.376102 100049V3            1   2894    460 Finland
2   5   12  2982.376102 100049V3            1   2894    110 Switzerland

BOLDとしてマークされた値のみを表示したい場合

それらに関してはCummSold > Balance(2902 は 2894 より大きい) であり、daynumber12 ではなく最低の 11 です。

私の SQL Server の知識はここで終わりのようです。私は多くのことを検索して試しましたが、おそらく非常に「ばかげた」ものを見落としているだけかもしれません

ヘルプや提案をいただければ幸いです

4

2 に答える 2

1

SQL Server 2005+ の場合、分析関数を試すことができます。

;WITH CTE AS
(
    SELECT  a.MonthNR,
            a.DayNR,
            a.DayInStock,
            a.CummSold,
            a.WarehouseID,
            a.ItemID,
            a.[Group],
            a.Balance,
            a.CountryNumber,
            a.Country,
            ROW_NUMBER() OVER(PARTITION BY ItemID, [Group], Country
                              ORDER BY DayInStock) RN
    FROM dbo.VW_Critical_01_01 a
    WHERE CummSold > Balance
)
SELECT *
FROM CTE
WHERE RN = 1
于 2013-01-25T15:21:18.760 に答える
0

このようなもの?

select DayNR
     , DayInStock
     , CummSold
     , WarehouseID
     , ItemID
     , [Group]
     , Balance
     , CountryNumber
     , Country
from(SELECT DayInStock 
          , DayNR
          , DayInStock
          , CummSold
          , WarehouseID
          , ItemID
          , [Group]
          , Balance
          , CountryNumber
          , Country
          , min(DayInStock) over (partition by itemID,Group,Country) as minDayInStock
      FROM dbo.VW_Critical_01_01
      WHERE CummSold > Balance
)V
where V.DayInStock = V.minDayInStock
于 2013-01-25T15:59:26.420 に答える