Sql I';我很好奇为什么这些结果不同

Sql I';我很好奇为什么这些结果不同,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我从一个粗略的问题开始: SELECT S.Type, COUNT(DISTINCT C.StateProvince) FROM INV_LINE_ITEM ILI JOIN STOVE S ON ILI.FK_StoveNbr = S.SerialNumber JOIN INVOICE I ON I.InvoiceNbr = ILI.FK_InvoiceNbr JOIN CUSTOMER C ON I.FK_CustomerID = C.CustomerID WHERE C.Country =

我从一个粗略的问题开始:

SELECT S.Type,
COUNT(DISTINCT C.StateProvince)
FROM INV_LINE_ITEM ILI JOIN STOVE S ON ILI.FK_StoveNbr = S.SerialNumber
JOIN INVOICE I ON I.InvoiceNbr = ILI.FK_InvoiceNbr
JOIN CUSTOMER C ON I.FK_CustomerID = C.CustomerID
WHERE C.Country = 'USA' 
AND S.Type IN (SELECT S.Type
FROM INV_LINE_ITEM ILI JOIN STOVE S ON ILI.FK_StoveNbr = S.SerialNumber
JOIN INVOICE I ON I.InvoiceNbr = ILI.FK_InvoiceNbr
JOIN CUSTOMER C ON I.FK_CustomerID = C.CustomerID
WHERE C.Country = 'CAN' )
GROUP BY S.Type;
它返回了以下结果:

Type            
--------------- -----------
FiredAlways     9
FiredNow        8
所以,一旦我得到了我想要的查询工作方式,我决定格式化它一些,我注意到一些奇怪的事情

此查询将生成上述结果:

SELECT
CAST(S.Type as CHAR (10)) AS 'Stove Type',
COUNT(DISTINCT C.StateProvince) AS 'Number of Sales'
FROM STOVE S, INV_LINE_ITEM ILI, INVOICE I, CUSTOMER C
WHERE S.SerialNumber = ILI.FK_StoveNbr
AND ILI.FK_InvoiceNbr = I.InvoiceNbr
AND I.FK_CustomerID = C.CustomerID
AND C.Country = 'USA' 
AND S.Type IN 
(SELECT S.Type
FROM STOVE S, INV_LINE_ITEM ILI, INVOICE I, CUSTOMER C
WHERE S.SerialNumber = ILI.FK_StoveNbr
AND ILI.FK_InvoiceNbr = I.InvoiceNbr
AND I.FK_CustomerID = C.CustomerID
AND C.Country = 'CAN')
GROUP BY S.Type;
但这个查询没有:

SELECT
CAST(S.Type as CHAR (10)) AS 'Stove Type',
COUNT(DISTINCT C.StateProvince) AS 'Number of Sales'
FROM STOVE S, INV_LINE_ITEM ILI, INVOICE I, CUSTOMER C
WHERE S.SerialNumber = ILI.FK_StoveNbr
AND ILI.FK_InvoiceNbr = I.InvoiceNbr
AND I.FK_CustomerID = C.CustomerID
AND C.Country = 'USA' 
AND S.Type IN 
(SELECT CAST(S.Type as CHAR (10))
FROM STOVE S, INV_LINE_ITEM ILI, INVOICE I, CUSTOMER C
WHERE S.SerialNumber = ILI.FK_StoveNbr
AND ILI.FK_InvoiceNbr = I.InvoiceNbr
AND I.FK_CustomerID = C.CustomerID
AND C.Country = 'CAN')
GROUP BY S.Type;
相反,它会产生以下结果:

Stove Type Number of Sales
---------- ---------------
FiredNow   8

我也不知道为什么。我原以为我只编辑了第10行中的S.Type以匹配第2行中的S.Type,但很明显,更多的事情正在发生。

因为“FiredAlways”超过了你要铸造的10个字符。

因为“FiredAlways”超过了你要铸造的10个字符。

你说得对。我把演员阵容改为11人,一切正常。谢谢你的帮助,你说得对。我把演员阵容改为11人,一切正常。谢谢你的帮助。