나는 우리가 모든 판매를 볼 수있는 매장에 대한 일반적인 보고서 쿼리를 만들려고 노력하고있어 여기에 판매에서 일어났다 저장 내가 지금까지 구축 한 쿼리의 다음 지금여러 행을 하나의 열로 결합하여 다른 쿼리 결과에 표시 하시겠습니까? .
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 ... 등.
그래서 서브 쿼리가 하나 개 이상의 행이 문제를 해결
어떤 DB를 사용하는지 알려 주실 수 있습니까? SQLServer, MySQL, ...? –
@ user2941651 아, 죄송합니다! SQLServer를 사용하고 있습니다 –
[XML 경로] (http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string)를 사용할 수 있습니다. – Greenspark