将WHERE子句添加到带有第3个表中的参数的JOIN中

时间:2019-07-18 08:58:47

标签: sql sql-server sage

我正在使用一个程序将DATA从SQL Server Express数据库转换为.CSV文件,我正在使用C#。我遇到了SQL查询问题。

我需要使用特定的条件来减小查询的范围,但是该条件在另一个名为F_COLLABORATEUR的表中(它是法语的,但是名称真的没关系吧?)。我需要将此条件添加到查询WHERE F_DOCENTETE.CO_NO = F_COLLABORATEUR.CO_NO中,以与最后一个表(3)匹配。

这需要在单个大查询中,我进行了一些搜索并尝试进行子查询,但收到了以下错误消息:

  

16级,州1,第1行
  子查询返回的值超过1。当子查询跟随时,这是不允许的。...

然后我尝试使用联接,但是当我添加第三个条件时,它说:

  

无法绑定多部分标识符“ F_COLLABORATEUR”

(我是SQL的初学者)

SELECT
    F_DOCLIGNE.DL_Qte * F_DOCLIGNE.DL_PrixRU AS prix_revient_total
FROM
    F_DOCLIGNE 
JOIN 
    F_DOCENTETE ON ((F_DOCLIGNE.DO_Piece = F_DOCENTETE.DO_Piece)  
                AND(F_DOCENTETE.DO_PIECE LIKE 'BC%'));

代码在这里起作用,但是没有其他条件。

SELECT
    F_DOCLIGNE.DL_Qte * F_DOCLIGNE.DL_PrixRU AS prix_revient_total
FROM
    F_DOCLIGNE 
JOIN 
    F_DOCENTETE ON ((F_DOCLIGNE.DO_Piece = F_DOCENTETE.DO_Piece) 
                AND F_DOCENTETE.CO_NO = F_COLLABORATEUR.CO_NO 
                AND (F_DOCENTETE.DO_PIECE LIKE 'BC%'));

这是我要使用的完整ON

SELECT 
    F_COLLABORATEUR.CO_NOM AS nom_commercial,
    F_DOCENTETE.DO_PIECE AS ref_document,
    F_DOCENTETE.AB_NO AS numero_abonnement, 
    F_DOCENTETE.CA_NUM AS compte_analytique,  
    F_DOCENTETE.CBMODIFICATION AS modified_on, 
    F_DOCENTETE.CT_NUMPAYEUR AS ref_societe_payeur,
    F_DOCENTETE.DO_CONTACT AS contact, 
    F_DOCENTETE.DO_COORD01 AS nom_client_final1, 
    F_DOCENTETE.DO_COORD02 AS nom_client_final2,
    F_DOCENTETE.DO_DATE AS date_emission,
    F_DOCENTETE.DO_DEBUTPERIOD AS debut_periode,
    F_DOCENTETE.DO_FINPERIOD AS fin_periode, 
    F_DOCENTETE.DO_REF AS numero_piece_externe,
    F_DOCENTETE.DO_TIERS AS ref_societe_sage, 
    F_DOCENTETE.DO_TotalTTC - F_DOCENTETE.DO_TotalHTNet AS total_tva,
    F_DOCENTETE.DO_TotalHTNet AS total_ht,
    F_DOCENTETE.DO_TotalTTC AS total_ttc,
    /*I'D LIKE TO INSERT THE OTHER QUERY HERE!*/
    F_DOCENTETE.DO_TYPE AS type_document 
FROM 
    F_DOCENTETE, F_COLLABORATEUR
WHERE 
    F_DOCENTETE.CO_NO = F_COLLABORATEUR.CO_NO 
    AND (F_DOCENTETE.DO_PIECE LIKE 'BC%')

这是我必须使用的完整查询(3)

由于我使用的数据库是机密的,因此无法真正发布查询结果。但是我只有一张有1列的表格和一张有18列的表格,我想制作一张有19列的表格。

感谢您的回答!

2 个答案:

答案 0 :(得分:0)

由于您的回答,我设法更正了第一个查询。

我现在只需要将其与Query(3)合并。 (我可能也需要帮助)

这是我编写的代码(所有值都不匹配,但我认为这是本地问题...)

Select
F_DOCLIGNE.DO_Piece,
SUM((F_DOCLIGNE.DL_Qte)*(F_DOCLIGNE.DL_PrixRU)) as prix_revient_total
from F_DOCLIGNE
JOIN F_DOCENTETE
ON ((F_DOCLIGNE.DO_Piece = F_DOCENTETE.DO_Piece) AND(F_DOCENTETE.DO_PIECE LIKE 'BC%'))
JOIN F_COLLABORATEUR
ON F_DOCENTETE.Co_No = F_COLLABORATEUR.CO_NO
GROUP BY F_DOCLIGNE.DO_Piece, F_DOCENTETE.DO_Piece

答案 1 :(得分:0)

您可以按以下方式分组搜索结果-

SELECT F_DOCLIGNE.DO_Piece, 
      SUM( (F_DOCLIGNE.DL_Qte) * (F_DOCLIGNE.DL_PrixRU)) AS prix_revient_total
FROM F_DOCLIGNE
     JOIN F_DOCENTETE ON((F_DOCLIGNE.DO_Piece = F_DOCENTETE.DO_Piece)
                         AND (F_DOCENTETE.DO_PIECE LIKE 'BC%'))
     JOIN F_COLLABORATEUR ON F_DOCENTETE.Co_No = F_COLLABORATEUR.CO_NO
GROUP BY F_DOCLIGNE.DO_Piece;