SORU
11 Ocak 2010, PAZARTESİ


İlk satır Katılmak için Nasıl SQL Server:

Beton, ama varsayımsal bir örnek kullanacağım.

HerSiparişnormalde bir tane var sadecemadde hattı:

Emir:

OrderGUID   OrderNumber
=========   ============
{FFB2...}   STL-7442-1      
{3EC6...}   MPT-9931-8A

Lineİtems:

LineItemGUID   Order ID Quantity   Description
============   ======== ========   =================================
{098FBE3...}   1        7          prefabulated amulite
{1609B09...}   2        32         spurving bearing

Ama bazen iki satır öğeleri içeren bir emirdir

LineItemID   Order ID    Quantity   Description
==========   ========    ========   =================================
{A58A1...}   6,784,329   5          pentametric fan
{0E9BC...}   6,784,329   5          differential girdlespring 

Kullanıcı emir gösterirken normalde:

SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
    INNER JOIN LineItems 
    ON Orders.OrderID = LineItems.OrderID

Sipariş kalemi göstermek istiyorum. Ama bu arada sipariş iki veya daha fazla öğeleri içeren, emirgörünürolabilirçoğaltılabilir:

OrderNumber   Quantity   Description
===========   ========   ====================
STL-7442-1    7          prefabulated amulite
MPT-9931-8A   32         differential girdlespring
KSG-0619-81   5          panametric fan
KSG-0619-81   5          differential girdlespring

Gerçekten istediğim şey SQL Server varsadece birini seçolacak gibi ., ^em>yeterince iyi:

OrderNumber   Quantity   Description
===========   ========   ====================
STL-7442-1    7          prefabulated amulite
MPT-9931-8A   32         differential girdlespring
KSG-0619-81   5          panametric fan

Eğer maceracı olursam, kullanıcı, birden fazla olduğunu belirtmek için üç nokta gösterebilirim:

OrderNumber   Quantity   Description
===========   ========   ====================
STL-7442-1    7          prefabulated amulite
MPT-9931-8A   32         differential girdlespring
KSG-0619-81   5          panametric fan, ...

Yani soru nasıl ya

  • ortadan kaldırmak "" satır . yinelenen
  • sadece tekrarından kaçınmak için satır için Facebook'a katıl

İlk girişimi

İlk saf benim amacım sadece katılmaktı "TOP 1" öğeleri çizgi:

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

Ama bu hata veriyor:

Sütun öneki 'Emir' değil bir tablo ile maç ya da takma adı sorguda kullanılan.

İç seçin dış tablo görmüyor çünkü muhtemelen.

CEVAP
11 Ocak 2010, PAZARTESİ


SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )

SQL Server 2005 ve üzeri, CROSS APPLY 20 *değiştir:

SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
CROSS APPLY
        (
        SELECT  TOP 1 LineItems.Quantity, LineItems.Description
        FROM    LineItems
        WHERE   LineItems.OrderID = Orders.OrderID
        ) LineItems2

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • Jonathan Flavell

    Jonathan Fla

    1 HAZİRAN 2006
  • tunez4you

    tunez4you

    20 EKİM 2008