하나의 가능성이 있습니다. 명확성을 위해 테이블 변수를 사용했습니다. 하위 쿼리에이 중 일부를 적용 할 수 있습니다. 그러나 이것은 즉시 작동해야합니다. 모든 답변 및 지원에 대한 여러분 모두 감사의
-- Your example data for demonstration purposes.
CREATE TABLE #STOCKS (stock_name nvarchar(5), a_id int)
INSERT INTO #STOCKS (stock_name, a_id) VALUES ('A.001', 0)
INSERT INTO #STOCKS (stock_name, a_id) VALUES ('B.001', 0)
INSERT INTO #STOCKS (stock_name, a_id) VALUES ('C.001', 20)
INSERT INTO #STOCKS (stock_name, a_id) VALUES ('A.002', 0)
INSERT INTO #STOCKS (stock_name, a_id) VALUES ('B.002', 10)
INSERT INTO #STOCKS (stock_name, a_id) VALUES ('A.003', 0)
-- To capture the stock name fragments, and the maximum value for each name fragment.
DECLARE @StockValues TABLE (stock nvarchar(5), stockNameFrag nvarchar(5), stockValue int)
DECLARE @StockMaxValues TABLE (stockNameFrag nvarchar(5), stockMaxValue int)
-- Data captured in this variable gets used in the next subquery.
INSERT INTO @StockValues (stock, stockNameFrag, stockValue)
SELECT s.stock_name, SUBSTRING(s.stock_name, 3, 20), s.a_id
FROM #STOCKS s
ORDER BY s.a_id DESC
-- Now extract the maximum value for each name fragment in @StockValues.
INSERT INTO @StockMaxValues
SELECT sv1.stockNameFrag, MAX(sv2.MaxValue)
FROM @StockValues sv1
INNER JOIN (
SELECT stockNameFrag, MAX(stockValue) AS MaxValue
FROM @StockValues
GROUP BY stockNameFrag
) sv2 ON sv1.stockNameFrag = sv2.stockNameFrag AND sv1.stockValue = sv2.MaxValue
GROUP BY sv1.stock, sv1.stockNameFrag
-- Store results you want
DECLARE @Stock TABLE (stock nvarchar(5), stockMaxValue int)
INSERT INTO @Stock (stock, stockMaxValue)
SELECT s.stock_name, smv.stockMaxValue
FROM #STOCKS s
INNER JOIN @StockMaxValues smv ON smv.stockNameFrag = SUBSTRING(s.stock_name, 3, 20)
-- Now update the #STOCKS table with the max value for each stock.
UPDATE s1
SET s1.a_id = s2.stockMaxValue
FROM #STOCKS s1
INNER JOIN @Stock s2 ON s1.stock_name = s2.stock
SELECT * FROM #STOCKS
-- Cleanup from the demo table.
DROP TABLE #STOCKS
사용중인 데이터베이스에 질문에 태그를 지정해야합니다. –
안녕하세요 고든, 귀하의 의견에 많은 감사드립니다. 나는 너에게 질문을 편집했다. –