Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 如何在联接查询中使用MAX()_Sql_Sql Server - Fatal编程技术网

Sql 如何在联接查询中使用MAX()

Sql 如何在联接查询中使用MAX(),sql,sql-server,Sql,Sql Server,我想创建一个查询,从recit表中获取RECID,它是Customer表中的custname和recit上的最大RECID。但不知何故,这个查询抛出了一个错误。它始于我将maxMAXREC.REC_Id_I添加为RECID时 查询是: SELECT REC.REC_Id_I, REC.REC_No_V, CUS.CUS_Name_V, REC.REC_PaidAmount_M, CASE WHEN REC.REC_PayMode_C = '

我想创建一个查询,从recit表中获取RECID,它是Customer表中的custname和recit上的最大RECID。但不知何故,这个查询抛出了一个错误。它始于我将maxMAXREC.REC_Id_I添加为RECID时

查询是:

SELECT
    REC.REC_Id_I,
    REC.REC_No_V,
    CUS.CUS_Name_V,
    REC.REC_PaidAmount_M,
    CASE
        WHEN REC.REC_PayMode_C = 'C' THEN 'Cash'
        ELSE 'Cheque'
    END AS REC_PayMode_C,
    REC.REC_BankName_V,
    REC.REC_BankAddress,
    REC.REC_ChequeNo_V,
    convert(varchar, REC.REC_ChequeDate_D, 103) AS REC_ChequeDate_D,
    REC.REC_Date_D,
    MAX(REC.REC_Id_I) As RECID
FROM TBL_Receipts REC
JOIN TBL_CustomerMaster CUS ON REC.REC_CustomerId_I = CUS.CUS_Id_I
WHERE
  REC_Active_c='y'
  AND REC_SalesMasterId_I='0'
ORDER BY REC_Id_I
错误是:

Msg 8120,级别16,状态1,程序sp_Receivement_Select,第15行列“TBL_Receives.REC_Id_I”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中


除聚合函数外,您几乎需要按所有选定的列进行分组。如果您考虑结果将如何显示,那么所有列都应位于组中,这对您来说应该是有意义的:

SELECT
    REC.REC_Id_I,
    REC.REC_No_V,
    CUS.CUS_Name_V,
    REC.REC_PaidAmount_M,
    CASE
        WHEN REC.REC_PayMode_C = 'C' THEN 'Cash'
        ELSE 'Cheque'
    END AS REC_PayMode_C,
    REC.REC_BankName_V,
    REC.REC_BankAddress,
    REC.REC_ChequeNo_V,
    convert(varchar, REC.REC_ChequeDate_D, 103) AS REC_ChequeDate_D,
    REC.REC_Date_D,
    MAX(REC.REC_Id_I) As RECID
FROM TBL_Receipts REC
JOIN TBL_CustomerMaster CUS ON REC.REC_CustomerId_I = CUS.CUS_Id_I
WHERE
  REC_Active_c='y'
  AND REC_SalesMasterId_I='0'
 GROUP BY 
    REC.REC_Id_I,
    REC.REC_No_V,
    CUS.CUS_Name_V,
    REC.REC_PaidAmount_M,
    CASE
        WHEN REC.REC_PayMode_C = 'C' THEN 'Cash'
        ELSE 'Cheque'
    END AS REC_PayMode_C,
    REC.REC_BankName_V,
    REC.REC_BankAddress,
    REC.REC_ChequeNo_V,
    convert(varchar, REC.REC_ChequeDate_D, 103) AS REC_ChequeDate_D,
    REC.REC_Date_D
ORDER BY REC_Id_I

添加GROUPBY子句时会出现什么错误?永远不要写你有错误,总是写错误是什么

我不知道您是如何使用GROUP BY子句编写查询的,因为您尚未向我们展示它,但请尝试以下方法:

SELECT
    REC.REC_Id_I,
    REC.REC_No_V,
    CUS.CUS_Name_V,
    REC.REC_PaidAmount_M,
    CASE
        WHEN REC.REC_PayMode_C = 'C' THEN 'Cash'
        ELSE 'Cheque'
    END AS REC_PayMode_C,
    REC.REC_BankName_V,
    REC.REC_BankAddress,
    REC.REC_ChequeNo_V,
    convert(varchar, REC.REC_ChequeDate_D, 103) AS REC_ChequeDate_D,
    REC.REC_Date_D,
    MAX(REC.REC_Id_I) As RECID
FROM TBL_Receipts REC
JOIN TBL_CustomerMaster CUS ON REC.REC_CustomerId_I = CUS.CUS_Id_I
WHERE
  REC_Active_c='y'
  AND REC_SalesMasterId_I='0'
GROUP BY
  REC.REC_Id_I,
  REC.REC_No_V,
  CUS.CUS_Name_V,
  REC.REC_PaidAmount_M,
  CASE
      WHEN REC.REC_PayMode_C = 'C' THEN 'Cash'
      ELSE 'Cheque'
  END,
  REC.REC_BankName_V,
  REC.REC_BankAddress,
  REC.REC_ChequeNo_V,
  convert(varchar, REC.REC_ChequeDate_D, 103),
  REC.REC_Date_D
ORDER BY REC_Id_I;

如果您的GROUPBY子句仍然存在问题,您可以尝试类似的方法,即使这不是最佳解决方案,它也应该可以工作

SELECT
    REC.REC_Id_I,
    REC.REC_No_V,
    CUS.CUS_Name_V,
    REC.REC_PaidAmount_M,
    CASE
        WHEN REC.REC_PayMode_C = 'C' THEN 'Cash'
        ELSE 'Cheque'
    END AS REC_PayMode_C,
    REC.REC_BankName_V,
    REC.REC_BankAddress,
    REC.REC_ChequeNo_V,
    convert(varchar, REC.REC_ChequeDate_D, 103) AS REC_ChequeDate_D,
    REC.REC_Date_D,
    recid.maxRECID As RECID
FROM TBL_Receipts REC
JOIN TBL_CustomerMaster CUS ON REC.REC_CustomerId_I = CUS.CUS_Id_I
JOIN (SELECT MAX(REC_ID_I) as maxRECID, REC_CustomerId_I FROM REC group by REC_CustomerId_I) as recid ON recid.REC_CustomerId_I = REC.REC_CustomerId_I
WHERE
  REC_Active_c='y'
  AND REC_SalesMasterId_I='0'
ORDER BY REC_Id_I

通过使用select语句,我解决了我的问题

代码是:


若要计算聚合函数并获取相应的列值,必须将GROUP BY中的所有其他列(计算聚合的列除外)

SELECT table_1.column_A,
       MAX(table_2.column_B),
       table_2.column_C

FROM table_1
     INNER JOIN table_2   ON table_1.column_A=table_2.column_B

GROUP BY table_1.column_A,
         table_2.column_C

MSSQL不是MySQL。您需要显式地按列分组。@Juhana错误消息表明它是MSSQL。MySQL只是隐式地按列分组。就像在其他地方使用GROUP BY一样。我使用GROUP BY,即使它显示错误
SELECT table_1.column_A,
       MAX(table_2.column_B),
       table_2.column_C

FROM table_1
     INNER JOIN table_2   ON table_1.column_A=table_2.column_B

GROUP BY table_1.column_A,
         table_2.column_C