0

次のデータを含むテーブルがあります。

ITEM          LOCATION          ItemKey  
5551212       A                 5  
5551212       B                 4  
5551212       C                 3  
5553434       A                 2  
5553434       B                 1  

私が望むのは、このデータをクエリして、各項目の ItemKey が = Max(ItemKey) で F でない場合、値が T である別の列を返すことができるようにすることです。たとえば、結果は次のようになります。

ITEM          LOCATION          ItemKey          NEWFIELD  
5551212       A                 5                T  
5551212       B                 4                F  
5551212       C                 3                F  
5553434       A                 2                T  
5553434       B                 1                F  

何か案は?

ありがとうございました

4

2 に答える 2

1

に設定したいT場合は、次の場所に属している場合Max(ItemKey)

SELECT t1.ITEM, t1.LOCATION, t1.ItemKey, 
       NEWFIELD = CASE WHEN LOCATION = 
                  (SELECT TOP 1 t2.Location 
                   FROM dbo.TableName t2
                   ORDER BY t2.ItemKey DESC)
                  THEN 'T' ELSE 'F' END
FROM  dbo.TableName t1
于 2013-10-22T15:25:11.523 に答える
0

たぶん、このようなものがうまくいくでしょう:

SELECT 
  t1.*, 
  CASE t1.ItemKey WHEN t2.MaxItem THEN 'T' ELSE 'F' END AS NEWFIELD 
FROM table_name t1
LEFT JOIN (
  SELECT item, MAX(ItemKey) AS MaxItem 
  FROM table_name
  GROUP BY item
) t2 ON t1.ITEM = t2.ITEM

ただし、問題を解決するための最も効率的な方法ではないかもしれません。

于 2013-10-22T15:26:05.773 に答える