真的很难获得我需要的数字。 我需要预测出售大多数炉灶的州。
我有:
SELECT DISTINCT TOP 2 C.StateProvince,
COUNT(*) AS TimesSold
FROM CUSTOMER C
INNER JOIN INVOICE I ON C.CustomerID = I.FK_CustomerID
INNER JOIN INV_LINE_ITEM L ON I.InvoiceNbr = L.FK_InvoiceNbr
FULL OUTER JOIN STOVE S ON S.SerialNumber = L.FK_StoveNbr
GROUP BY C.StateProvince, L.FK_StoveNbr
ORDER BY TimesSold DESC;
我得到的输出是:
State Count
------ -----
OR 20
MT 16
但我需要的输出是:
State Count
------ -----
OR 20
CO 9
这让我相信我不算正确的事情。
数据包括:
CUSTOMER (CustomerID, Name, StreetAddress, ApartmentNbr, City,
StateProvince, Zipcode, Country)
INVOICE (InvoiceNbr, InvoiceDt, TotalPrice, FK_CustomerID, FK_EmpID)
EMPLOYEE (EmpID, Name, Title, Initials)
INV_LINE_ITEM (LineNbr, Quantity, FK_InvoiceNbr, FK_PartNbr,
FK_StoveNbr, ExtendedPrice)
STOVE (SerialNumber, Type, Version, DateOfManufacture, Color, FK_EmpID)
答案 0 :(得分:0)
{Knee-jerk reaction}改变这个
按TimesSold DESC订购;
到这个
按COUNT排序(*)DESC;
答案 1 :(得分:0)
我认为你在寻找:
SELECT DISTINCT TOP 2 C.StateProvince, COUNT(*) AS TimesSold
FROM CUSTOMER C INNER JOIN
INVOICE I
ON C.CustomerID = I.FK_CustomerID INNER JOIN
INV_LINE_ITEM L
ON I.InvoiceNbr = L.FK_InvoiceNbr INNER JOIN
STOVE S
ON S.SerialNumber = L.FK_StoveNbr
GROUP BY C.StateProvince
ORDER BY TimesSold DESC;
我认为问题是GROUP BY
。但是,FULL OUTER JOIN
无效。
答案 2 :(得分:0)
这只是你查询格式化的
需要使用明确是一个问题的明确指示
炉子上的完全外部连接什么都不做 - 如果SerialNumber不是唯一的,它可能会破坏东西
始终按列报告组
SELECT DISTINCT TOP 2
C.StateProvince, COUNT(*) AS TimesSold
FROM CUSTOMER C
INNER JOIN INVOICE I
ON C.CustomerID = I.FK_CustomerID
INNER JOIN INV_LINE_ITEM L
ON I.InvoiceNbr = L.FK_InvoiceNbr
FULL OUTER JOIN STOVE S
ON S.SerialNumber = L.FK_StoveNbr
GROUP BY C.StateProvince, L.FK_StoveNbr
ORDER BY TimesSold DESC;
如果你运行它,你应该看到你的问题
SELECT C.StateProvince, L.FK_StoveNbr, COUNT(*) AS TimesSold
FROM CUSTOMER C
INNER JOIN INVOICE I
ON C.CustomerID = I.FK_CustomerID
INNER JOIN INV_LINE_ITEM L
ON I.InvoiceNbr = L.FK_InvoiceNbr
GROUP BY C.StateProvince, L.FK_StoveNbr
ORDER BY C.StateProvince, L.FK_StoveNbr;
如果加入炉灶只是为了找到炉子,那就把它作为内部连接。