Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回重复项的查询 将ANSI_空值设置为ON 在上设置带引号的\u标识符 去 更改过程[dbo].[PrintQuickBill](@BillNo int) 作为 选择A.BillNo, A.BillDate, 客户名称, A.地址:, A.客户ID, A.Billamt, A.BillPartAmt, A.Servatasamt, A.瓦塔姆, A.BillNetAmt, 来自dbo.tblQuickBillMain A 内部联接[dbo].tblQuickBilll 在A.BillNo=L.BillNo上 内部联接[dbo].TBLQuickBillP 在A.BillNo=P.BillNo上 交叉连接dbo.CompanyInfo 其中A.BillNo=@BillNo 按客户名称订购_Sql_Sql Server_Tsql_Sql Server 2005 - Fatal编程技术网

Sql 返回重复项的查询 将ANSI_空值设置为ON 在上设置带引号的\u标识符 去 更改过程[dbo].[PrintQuickBill](@BillNo int) 作为 选择A.BillNo, A.BillDate, 客户名称, A.地址:, A.客户ID, A.Billamt, A.BillPartAmt, A.Servatasamt, A.瓦塔姆, A.BillNetAmt, 来自dbo.tblQuickBillMain A 内部联接[dbo].tblQuickBilll 在A.BillNo=L.BillNo上 内部联接[dbo].TBLQuickBillP 在A.BillNo=P.BillNo上 交叉连接dbo.CompanyInfo 其中A.BillNo=@BillNo 按客户名称订购

Sql 返回重复项的查询 将ANSI_空值设置为ON 在上设置带引号的\u标识符 去 更改过程[dbo].[PrintQuickBill](@BillNo int) 作为 选择A.BillNo, A.BillDate, 客户名称, A.地址:, A.客户ID, A.Billamt, A.BillPartAmt, A.Servatasamt, A.瓦塔姆, A.BillNetAmt, 来自dbo.tblQuickBillMain A 内部联接[dbo].tblQuickBilll 在A.BillNo=L.BillNo上 内部联接[dbo].TBLQuickBillP 在A.BillNo=P.BillNo上 交叉连接dbo.CompanyInfo 其中A.BillNo=@BillNo 按客户名称订购,sql,sql-server,tsql,sql-server-2005,Sql,Sql Server,Tsql,Sql Server 2005,此SELECT语句多次返回相同的结果。如果我有1条记录,结果显示它3次。如果我将@BillNo=1传递给过程,它应该只返回一行,但它返回3行,它们是相同的 您的查询与表CompanyInfo有交叉连接。它返回三行,因为交叉联接(CompanyInfo)中的表有三行。您没有使用CompanyInfo的任何列,因此我认为不需要交叉连接 您的查询与表CompanyInfo有交叉连接。它返回三行,因为交叉联接(CompanyInfo)中的表有三行。您没有使用CompanyInfo的任何列,因此我认为不需

SELECT
语句多次返回相同的结果。如果我有1条记录,结果显示它3次。如果我将
@BillNo=1
传递给过程,它应该只返回一行,但它返回3行,它们是相同的

您的查询与表CompanyInfo有交叉连接。它返回三行,因为交叉联接(CompanyInfo)中的表有三行。您没有使用CompanyInfo的任何列,因此我认为不需要交叉连接

您的查询与表CompanyInfo有交叉连接。它返回三行,因为交叉联接(CompanyInfo)中的表有三行。您没有使用CompanyInfo的任何列,因此我认为不需要交叉连接

重复是由以下三种情况之一(或它们的组合)造成的:

  • 当公司信息有多条记录时(如3条记录)
  • tblQuickBillLabor.BillNo有重复项时
  • tblQuickBillParts.BillNo有重复项时
您看不到某些结果之间的差异,因为在
SELECT
列表中没有显示来自其他表的任何数据。如果您还想在
SELECT
列表中包含来自其他表的列,您会注意到这些列在结果中会有不同的值,其中第一组列会有重复项

但是,由于您在查询中根本不使用表CompanyInfo中的值,因此您应该以任何方式删除查询中的
交叉连接CompanyInfo
部分:除非您在
选择列表中实际包含该表中的列,否则它没有任何用途。删除此选项可能已经完全解决了您的问题

但是,表名tblQuickBillParts强烈表明,您将在该表中为同一BillNo拥有多条记录,否则您不会以复数形式将其称为Parts。对于表tblQuickBillLabor,情况可能也是如此

要解决与tblQuickBillLabor.BillNo和tblQuickBillParts.BillNo的联接引起的这些潜在问题,请参阅以下解决方案:

解决方案A:根本不连接表 由于您仅从tblQuickBillMain中选择值,因此最终可能根本不需要连接其他表,只需编写:

SELECT   BillNo, 
         BillDate, 
         CustomerName, 
         Address, 
         CustomerId, 
         BillLaborAmt, 
         BillPartAmt, 
         ServTaxAmt, 
         VatAmt,
         BillNetAmt,
FROM     dbo.tblQuickBillMain
WHERE    BillNo=@BillNo
ORDER BY CustomerName
这样,您将不会获得重复的记录,但您也将获得在tblQuickBillLabor.BillNotblQuickBillParts.BillNo中没有相应记录的记录。如果需要匹配,则检查下一个解决方案

解决方案B:用子查询替换联接 如果与tblQuickBillLabor.BillNotblQuickBillParts.BillNo进行联接的原因是您希望确保这些表中至少有一条匹配记录,则使用
WHERE
条件,改为
BillNo in(子查询)

请注意,使用此SQL语句,您不需要将表别名为ApL,因为没有歧义

解决方案C:坏
选择DISTINCT
从结果集中删除重复项的一种简单但不可取的方法是在单词
后面选择


有了这个“解决方案”,你就无法真正找到问题的根源;您只需忽略它并请求一个不重复的结果集。因此,我真的建议您选择解决方案A或B,以最适合您的要求为准。

重复的结果来自以下三种情况之一(或它们的组合):

  • 当公司信息有多条记录时(如3条记录)
  • tblQuickBillLabor.BillNo有重复项时
  • tblQuickBillParts.BillNo有重复项时
您看不到某些结果之间的差异,因为在
SELECT
列表中没有显示来自其他表的任何数据。如果您还想在
SELECT
列表中包含来自其他表的列,您会注意到这些列在结果中会有不同的值,其中第一组列会有重复项

但是,由于您在查询中根本不使用表CompanyInfo中的值,因此您应该以任何方式删除查询中的
交叉连接CompanyInfo
部分:除非您在
选择列表中实际包含该表中的列,否则它没有任何用途。删除此选项可能已经完全解决了您的问题

但是,表名tblQuickBillParts强烈表明,您将在该表中为同一BillNo拥有多条记录,否则您不会以复数形式将其称为Parts。对于表tblQuickBillLabor,情况可能也是如此

要解决与tblQuickBillLabor.BillNo和tblQuickBillParts.BillNo的联接引起的这些潜在问题,请参阅以下解决方案:

解决方案
SELECT   BillNo, 
         BillDate, 
         CustomerName, 
         Address, 
         CustomerId, 
         BillLaborAmt, 
         BillPartAmt, 
         ServTaxAmt, 
         VatAmt,
         BillNetAmt,
FROM     dbo.tblQuickBillMain
WHERE    BillNo=@BillNo
AND      BillNo IN (SELECT BillNo FROM [dbo].tblQuickBillLabor)
AND      BillNo IN (SELECT BillNo FROM [dbo].tblQuickBillParts)
ORDER BY CustomerName