Как я могу получить все строки из основной таблицы и соответствующие строки из таблицы сведений в MS-SQL? - PullRequest
0 голосов
/ 17 февраля 2012

Я использую MS-SQL и пытаюсь написать запрос, который выбирает строки из основной таблицы и связанные строки из таблицы сведений.Теперь я хочу, чтобы он только извлекал первую строку из основной таблицы, а связанные поля из таблиц сведений должны быть пустыми в этой первой строке, теперь, если в деталях найдены связанные строкитаблицы, они должны быть показаны в отдельных строках.Я пытался использовать следующий запрос, но он не дает желаемого результата.

SELECT 
      DISTINCT 
      ProductMaster.ProductMasterID, ProductMaster.ProductName,
      ProductMaster.SubCategoryID, SubCategory.SubCategoryName,
      ProductBrandAndType.ProductBranAndTypeID, ProductBrandAndType.ProductType,
      ProductBrandAndType.Brand, ProductMaster.ProductDesc, 
      ProductMaster.ReOrderLevel 
FROM 
   ProductBrandAndType 
RIGHT OUTER JOIN 
   Inward 
ON ProductBrandAndType.ProductBranAndTypeID = Inward.ProductBrandAndTypeID 
RIGHT OUTER JOIN 
   ProductMaster 
ON Inward.ProductID = ProductMaster.ProductMasterID 
LEFT OUTER JOIN 
   SubCategory 
ON ProductMaster.SubCategoryID = SubCategory.SubCategoryID 
ORDER BY 
      ProductMaster.ProductName, 
      ProductBrandAndType.ProductType, 
      ProductBrandAndType.Brand;

Может ли кто-нибудь помочь мне в этом?

С уважением

Сикандар

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Следующий запрос сработал.

SELECT     dbo.ProductMaster.ProductMasterID, dbo.ProductMaster.ProductName, dbo.ProductMaster.SubCategoryID, dbo.ProductMaster.ProductDesc, 
                      dbo.ProductMaster.ReOrderLevel, null as ProductBrandAndTypeID,  
                      null AS Type, null as Brand
FROM         dbo.ProductBrandAndType RIGHT OUTER JOIN
                      dbo.Inward ON dbo.ProductBrandAndType.ProductBranAndTypeID = dbo.Inward.ProductBrandAndTypeID RIGHT OUTER JOIN
                      dbo.ProductMaster ON dbo.Inward.ProductID = dbo.ProductMaster.ProductMasterID LEFT OUTER JOIN
                      dbo.SubCategory ON dbo.ProductMaster.SubCategoryID = dbo.SubCategory.SubCategoryID
UNION 
SELECT     dbo.ProductMaster.ProductMasterID, dbo.ProductMaster.ProductName, dbo.ProductMaster.SubCategoryID, dbo.ProductMaster.ProductDesc, 
                      dbo.ProductMaster.ReOrderLevel, dbo.ProductBrandAndType.ProductBranAndTypeID,  
                      dbo.ProductBrandAndType.ProductType, dbo.ProductBrandAndType.Brand
FROM         dbo.ProductBrandAndType RIGHT OUTER JOIN
                      dbo.Inward ON dbo.ProductBrandAndType.ProductBranAndTypeID = dbo.Inward.ProductBrandAndTypeID RIGHT OUTER JOIN
                      dbo.ProductMaster ON dbo.Inward.ProductID = dbo.ProductMaster.ProductMasterID LEFT OUTER JOIN
                      dbo.SubCategory ON dbo.ProductMaster.SubCategoryID = dbo.SubCategory.SubCategoryID                      
ORDER BY ProductName;   
0 голосов
/ 17 февраля 2012

Если вы просто какой первый ряд от ProductMaster. Тогда вы можете сделать что-то вроде этого:

;WITH CTE
(
    SELECT
        ROW_NUMBER() OVER(ORDER BY ProductMaster.ProductMasterID) AS RowNbr,
        ProductMaster.ProductName,
        ProductMaster.SubCategoryID,
        ProductMaster.ProductDesc, 
        ProductMaster.ReOrderLevel 
    FROM
        ProductMaster
)
SELECT
      ProductMaster.ProductMasterID, 
      ProductMaster.ProductName,
      ProductMaster.SubCategoryID, 
      SubCategory.SubCategoryName,
      ProductBrandAndType.ProductBranAndTypeID, 
      ProductBrandAndType.ProductType,
      ProductBrandAndType.Brand, 
      ProductMaster.ProductDesc, 
      ProductMaster.ReOrderLevel 
FROM 
   ProductBrandAndType 
RIGHT OUTER JOIN Inward 
    ON ProductBrandAndType.ProductBranAndTypeID = Inward.ProductBrandAndTypeID 
RIGHT OUTER JOIN CTE AS ProductMaster
    ON Inward.ProductID = ProductMaster.ProductMasterID
    AND RowNbr=1 
LEFT OUTER JOIN SubCategory 
    ON ProductMaster.SubCategoryID = SubCategory.SubCategoryID 
ORDER BY 
    ProductMaster.ProductName, 
    ProductBrandAndType.ProductType, 
    ProductBrandAndType.Brand;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...