我不得不猜测您的表名,但我认为这可以按要求工作:
SELECT InvoiceNo,
ProductName,
SUM(CASE WHEN Invoice.ProductCode = Product.ProductCode THEN Quantity ELSE 0 END) AS Quantity
FROM Invoice, Product
GROUP BY InvoiceNo, ProductName
编辑
要以您需要使用条件SUMs 之后的格式获取数据,因为我认为 SQL-Server CE 不支持PIVOT。像这样的东西对你有用:
SELECT InvoiceNum,
SUM(CASE WHEN ProductCode = 'P1' THEN Quantity ELSE 0 END) [Product 1],
SUM(CASE WHEN ProductCode = 'P2' THEN Quantity ELSE 0 END) [Product 2],
SUM(CASE WHEN ProductCode = 'P3' THEN Quantity ELSE 0 END) [Product 3]
FROM Invoice
GROUP BY InvoiceNum
这只有在您了解编写代码时拥有的所有产品时才有效。如果这可能会改变,您可以使用动态 SQL 创建上述查询,但动态添加产品,因此在添加新产品时不需要更改查询。我还没有在 CE 上对此进行测试,但我看不出它有任何不起作用的原因。
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL, '') + ', SUM(CASE WHEN ProductCode = ''' + ProductCode + ''' THEN Quantity ELSE 0 END) ' + QUOTENAME(ProductName)
FROM Product
SET @SQL = N'SELECT InvoiceNum' + @SQL + N'FROM Invoice GROUP BY InvoiceNum'
EXECUTE SP_EXECUTESQL @SQL
我在SQL Fiddle 上放了一些使用 SQL-Server 2008R2 的示例