具体的で架空の例を使用します。
通常、各注文には1つの品目しかありません。
注文:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
LineItems:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
ただし、場合によっては、2つの広告申込情報を含む注文が発生することがあります。
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
通常、注文をユーザーに表示する場合:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
注文の1つのアイテムを表示します。ただし、この偶発的な注文に2つ(またはそれ以上)のアイテムが含まれていると、注文が重複して表示されます。ます。
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 spurving bearing
KSG-0619-81 5 panametric fan
KSG-0619-81 5 differential girdlespring
私が本当に望んでいるのは、SQL Server に1つだけ選択させることです。これで十分です。です。
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
冒険したい場合は、ユーザーに省略記号を表示して、複数あることを示すことができます。
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
だから問題はどのように
- 「重複」行を排除する
- 重複を避けるために、行の1つにのみ結合する
最初の試み
私の最初の素朴な試みは、「TOP 1」の広告申込情報にのみ参加することでした。
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN (
SELECT TOP 1 LineItems.Quantity, LineItems.Description
FROM LineItems
WHERE LineItems.OrderID = Orders.OrderID) LineItems2
ON 1=1
しかし、それはエラーを与えます:
列またはプレフィックス 'Orders'が 、クエリで使用されて
いるテーブル名またはエイリアス名と一致しません
。
おそらく、内部選択が外部テーブルを認識しないためです。
group by
重複したくない列を除いて、他のすべての列をリストする必要があると思います(私が間違っている場合は訂正してください)。出典
group by
?