2014-12-18 4 views
0

나는 우리가 모든 판매를 볼 수있는 매장에 대한 일반적인 보고서 쿼리를 만들려고 노력하고있어 여기에 판매에서 일어났다 저장 내가 지금까지 구축 한 쿼리의 다음 지금여러 행을 하나의 열로 결합하여 다른 쿼리 결과에 표시 하시겠습니까? .

SELECT  Customer.LastName + ', ' + Customer.FirstName AS 'Customer Name', 
      Store.Name AS 'Store', 
      Item.ItemCode + ': ' + Item.Name AS 'Item', 
      Sale.SaleID AS 'Sale ID', 
      Sale.SaleDate 'Date', 
      Sale.SubTotal AS 'Subtotal', 
      Sale.GST AS 'GST' 
      Sale.SaleTotal AS 'Sale Total' 
FROM  Sale 
      INNER JOIN Customer ON Sale.CustomerID = Customer.CustomerID 
      INNER JOIN Store ON Sale.StoreID = Store.StoredID 
      INNER JOIN SaleItem ON SaleItem.SaleNumber = Sale.SaleNumber 
      INNER JOIN Item ON Item.ItemCode = SaleItem.ItemCode 
WHERE  Sale.SaleDate >= DATEADD(MONTH, -1, GETDATE()) 
ORDER BY Sale.SaleDate DESC 

위의 쿼리의 결과는 다음과 같이 (유래가 테이블을 허용하지 않기 때문에 내가 코드 형식에 넣어 것)을 보이는 :

<table> 
     <tr> 
      <td>Customer Name</td> 
      <td>Store</td> 
      <td>Item</td> 
      <td>Sale ID</td> 
      <td>Date</td> 
      <td>Subtotal</td> 
      <td>GST</td> 
      <td>Sale Total</td> 
     </tr> 
     <tr> 
      <td>John Smith</td> 
      <td>Store No. 1</td> 
      <td>001: Item ABC</td> 
      <td>1</td> 
      <td>2014-12-18</td> 
      <td>100.00</td> 
      <td>5.00</td> 
      <td>105.00</td> 
     </tr> 
     <tr> 
      <td>John Smith</td> 
      <td>Store No. 1</td> 
      <td>002: Item DEF</td> 
      <td>1</td> 
      <td>2014-12-18</td> 
      <td>100.00</td> 
      <td>5.00</td> 
      <td>105.00</td> 
     </tr> 
     <tr> 
      <td>John Smith</td> 
      <td>Store No. 1</td> 
      <td>003: Item GHI</td> 
      <td>1</td> 
      <td>2014-12-18</td> 
      <td>100.00</td> 
      <td>5.00</td> 
      <td>105.00</td> 
     </tr> 
    </table> 

그래서 내가 정말하고 싶은 것은 하나 개의 컬럼에 그 판매 상품을 결합 그래서 다음과 같이 표시 할 수 있습니다.

<table> 
     <tr> 
      <td>Customer Name</td> 
      <td>Store</td> 
      <td>Item</td> 
      <td>Sale ID</td> 
      <td>Date</td> 
      <td>Subtotal</td> 
      <td>GST</td> 
      <td>Sale Total</td> 
     </tr> 
     <tr> 
      <td>John Smith</td> 
      <td>Store No. 1</td> 
      <td>001: Item ABC; 002: Item DEF; 003: Item GHI</td> 
      <td>1</td> 
      <td>2014-12-18</td> 
      <td>100.00</td> 
      <td>5.00</td> 
      <td>105.00</td> 
     </tr> 
    </table> 

솔직히 말해서 나는 SQL에 상당히 익숙하기 때문에 (1.5 년 동안 만 해왔음) 솔직히이 일을 수행하는 방법을 모르겠지만 일종의 부질의가 필요할 것입니다.

또한이 실제 결과는 월의 모든 다른 판매액을 포함하기 때문에 훨씬 클 것입니다. 그래서 나는 그 판매에 대한 행의 각 판매에 대한 판매 품목을 결합하고 싶습니다.

도움을 주시면 감사하겠습니다. 감사!

편집 : 나는 SQL 서버를

EDIT2을 사용하고 있습니다 :

SELECT  Customer.LastName + ', ' + Customer.FirstName AS 'Customer Name', 
      Store.Name AS 'Store', 
      (SELECT 
        STUFF((SELECT '; ' + Item.ItemCode + ': ' + Item.Name 
          FROM Item 
           INNER JOIN SaleItem ON SaleItem.ItemCode = Item.ItemCode 
          WHERE SaleItem.SaleID = Sale.SaleID 
          FOR XML PATH('')), 1, 1, '') [Item Code/Name] 
       FROM SaleItem 
         INNER JOIN Sale ON SaleItem.SaleID = Sale.SaleID 
       WHERE Sale.SaleID = SaleItem.SaleID 
       GROUP BY Sale.SaleID, SaleItem.SaleID) AS 'Item', 
      Sale.SaleID AS 'Sale ID', 
      Sale.SaleDate 'Date', 
      Sale.SubTotal AS 'Subtotal', 
      Sale.GST AS 'GST' 
      Sale.SaleTotal AS 'Sale Total' 
FROM  Sale 
      INNER JOIN Customer ON Sale.CustomerID = Customer.CustomerID 
      INNER JOIN Store ON Sale.StoreID = Store.StoredID 
      INNER JOIN SaleItem ON SaleItem.SaleNumber = Sale.SaleNumber 
      INNER JOIN Item ON Item.ItemCode = SaleItem.ItemCode 
WHERE  Sale.SaleDate >= DATEADD(MONTH, -1, GETDATE()) 
ORDER BY Sale.SaleDate DESC 

그러나, 내가 만든 하위 쿼리에 대한 모든 판매 상품의 조합이 반환 : 나는 또한이 같은 XML 경로를 사용하여 시도 모든 단일 판매. 그래서 이런 식입니다.

Row1 : 001 : Item ABC; 002 : 아이템 DEF; 003 : GHI 항목
Row2 : 005 : 항목 MNO; 006 : 항목 PQR; 007 : 항목 STU
행 3 ...
행 4 ...
행 5 ... 등.

그래서 서브 쿼리가 하나 개 이상의 행이 문제를 해결

+1

어떤 DB를 사용하는지 알려 주실 수 있습니까? SQLServer, MySQL, ...? –

+0

@ user2941651 아, 죄송합니다! SQLServer를 사용하고 있습니다 –

+1

[XML 경로] (http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string)를 사용할 수 있습니다. – Greenspark

답변

0

을 반환하기 때문에도 실행되지 않습니다이 큰 쿼리. 내가 XML PATH로 놀고있을 때 나는 아주 가깝다. 다음은 내가 무엇을 끝내 었는지를 보여줍니다.

SELECT  Customer.LastName + ', ' + Customer.FirstName AS 'Customer Name', 
      Store.Name AS 'Store', 
      STUFF((SELECT '; ' + Item.ItemCode + ': ' + Item.Name 
        FROM Item 
         INNER JOIN SaleItem ON SaleItem.ItemCode = Item.ItemCode 
        WHERE SaleItem.SaleID = Sale.SaleID 
        FOR XML PATH('')), 1, 1, '') [Item Code/Name] 
      FROM SaleItem 
        INNER JOIN Sale ON SaleItem.SaleID = Sale.SaleID 
      WHERE Sale.SaleID = SaleItem.SaleID 
      GROUP BY Sale.SaleID, SaleItem.SaleID) AS 'Item', 
      Sale.SaleID AS 'Sale ID', 
      Sale.SaleDate 'Date', 
      Sale.SubTotal AS 'Subtotal', 
      Sale.GST AS 'GST' 
      Sale.SaleTotal AS 'Sale Total' 
FROM  Sale 
      INNER JOIN Customer ON Sale.CustomerID = Customer.CustomerID 
      INNER JOIN Store ON Sale.StoreID = Store.StoredID 
      INNER JOIN SaleItem ON SaleItem.SaleNumber = Sale.SaleNumber 
      INNER JOIN Item ON Item.ItemCode = SaleItem.ItemCode 
WHERE  Sale.SaleDate >= DATEADD(MONTH, -1, GETDATE()) 
ORDER BY Sale.SaleDate DESC 

이 쿼리는 내가 원하는 것을 정확하게 보여줍니다. 어쨌든 누구든지 댓글을 주셔서 감사합니다.

관련 문제