Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 为什么它给出了错误的语法?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 为什么它给出了错误的语法?

Sql 为什么它给出了错误的语法?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在SQL server中创建了三个表,分别名为t_user_master、t_product_master和t_transaction。t_user_master通过Users_id列与t_transaction链接,t_product_master通过Products_id列与t_transaction链接。现在我必须从t_user_master生成并输出由用户_name组成的表,与之链接的t_Product_master中的Product_Name,以便查看哪个用户订购了哪个产品,依此类推

我在SQL server中创建了三个表,分别名为t_user_master、t_product_master和t_transaction。t_user_master通过Users_id列与t_transaction链接,t_product_master通过Products_id列与t_transaction链接。现在我必须从t_user_master生成并输出由用户_name组成的表,与之链接的t_Product_master中的Product_Name,以便查看哪个用户订购了哪个产品,依此类推。 下面是我的代码片段-

 SELECT um.Users_Name,
       pm.Product_Name,
       (SELECT SUM(Transaction_Amount)
        FROM   t_transaction
        WHERE  Transaction_Type = 'Order'
        GROUP  BY Users_Id,
                  Product_Id) AS Ordered_quantity,
       (SELECT SUM(Transaction_Amount)
        FROM   t_transaction
        WHERE  Transaction_Type = 'Payment'
        GROUP  BY Users_ID,
                  Product_Id) AS Amount_Paid,
       (SELECT MAX(Transaction_Date)
        FROM   t_transaction
        GROUP  BY Users_Id,
                  Product_Id) AS Last_Transaction_Date,
       (SELECT ( ( SUM(Transaction_Amount) * pm.Cost_per_Item ) - SUM(Transaction_Amount) ) )AS Balance
        FROM   t_user_master um
               JOIN t_transaction tr
                 ON um.Users_ID = tr.Users_ID
               JOIN t_product_master pm
                 ON tr.Product_ID = pm.Product_ID
    GROUP BY um.Users_Name,pm.Product_Name 
我已经背诵了与语法相关的所有错误,但现在我面临另一个问题。执行该错误后,我收到一条消息-列“t_product_master.Cost_Per_Item”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。
我哪里出错了?

至少在这一行的末尾,您缺少了一个:

GROUP BY Users_Id,Product_Id) AS Last_Transaction_Date

至少你在这一行的末尾缺少了一个:

GROUP BY Users_Id,Product_Id) AS Last_Transaction_Date

LastTransactionDate之后缺少逗号,SELECT的最后一列似乎格式不正确,即

(SELECT ((SUM(Transaction_Amount)*pm.Cost_per_Item)-SUM(Transaction_Amount)) AS Balance

LastTransactionDate之后缺少逗号,SELECT的最后一列似乎格式不正确,即

(SELECT ((SUM(Transaction_Amount)*pm.Cost_per_Item)-SUM(Transaction_Amount)) AS Balance

您错过了第10行末尾的a和上次交易日期之后的a。试试这个:

SELECT    um.Users_Name,pm.Product_Name,
(SELECT   SUM(Transaction_Amount)
 FROM     t_transaction 
 WHERE    Transaction_Type='Order' 
 GROUP BY Users_Id,Product_Id
) AS Ordered_quantity,
(SELECT   SUM(Transaction_Amount)
 FROM     t_transaction 
 WHERE    Transaction_Type='Payment'
 GROUP BY Users_ID,Product_Id
) AS Amount_Paid,
(SELECT   MAX(Transaction_Date)
 FROM     t_transaction 
 GROUP BY Users_Id,Product_Id
) AS Last_Transaction_Date,
(SELECT   ( ( SUM(Transaction_Amount)*pm.Cost_per_Item ) - SUM(Transaction_Amount) )
) AS Balance
FROM      t_user_master um 
JOIN      t_transaction tr ON um.Users_ID=tr.Users_ID
JOIN      t_product_master pm ON tr.Product_ID = pm.Product_ID

GROUP BY um.Users_Name,pm.Product_Name

您错过了第10行末尾的a和上次交易日期之后的a。试试这个:

SELECT    um.Users_Name,pm.Product_Name,
(SELECT   SUM(Transaction_Amount)
 FROM     t_transaction 
 WHERE    Transaction_Type='Order' 
 GROUP BY Users_Id,Product_Id
) AS Ordered_quantity,
(SELECT   SUM(Transaction_Amount)
 FROM     t_transaction 
 WHERE    Transaction_Type='Payment'
 GROUP BY Users_ID,Product_Id
) AS Amount_Paid,
(SELECT   MAX(Transaction_Date)
 FROM     t_transaction 
 GROUP BY Users_Id,Product_Id
) AS Last_Transaction_Date,
(SELECT   ( ( SUM(Transaction_Amount)*pm.Cost_per_Item ) - SUM(Transaction_Amount) )
) AS Balance
FROM      t_user_master um 
JOIN      t_transaction tr ON um.Users_ID=tr.Users_ID
JOIN      t_product_master pm ON tr.Product_ID = pm.Product_ID

GROUP BY um.Users_Name,pm.Product_Name

您的查询中实际上有三个问题:

上次交易日期后缺少逗号。 选择平衡时结束括号。 计算余额时,您已使用每项pm.Cost\u。执行GROUP BY后,所有select语句列都将在生成的分组行上计算。我使用了sum,但您可以根据需要使用任何其他聚合函数。 正确的查询是:

SELECT um.Users_Name,
    pm.Product_Name,
    (SELECT SUM(Transaction_Amount) FROM t_transaction 
    WHERE Transaction_Type='Order' 
    GROUP BY Users_Id,Product_Id) AS Ordered_quantity,
    (SELECT SUM(Transaction_Amount) FROM t_transaction 
    WHERE Transaction_Type='Payment'
    GROUP BY Users_ID,Product_Id )AS Amount_Paid,
    (SELECT MAX(Transaction_Date) FROM t_transaction 
      GROUP BY Users_Id,Product_Id) AS Last_Transaction_Date, -- error 1
     (SELECT ((SUM(Transaction_Amount)* sum(pm.Cost_per_Item))-SUM(Transaction_Amount))) AS 
      Balance -- error 2 and error 3
FROM t_user_master um 
JOIN t_transaction tr ON um.Users_ID=tr.Users_ID
JOIN t_product_master pm ON tr.Product_ID = pm.Product_ID
GROUP BY um.Users_Name,pm.Product_Name ;

希望这有帮助

您的查询中实际上有三个问题:

上次交易日期后缺少逗号。 选择平衡时结束括号。 计算余额时,您已使用每项pm.Cost\u。执行GROUP BY后,所有select语句列都将在生成的分组行上计算。我使用了sum,但您可以根据需要使用任何其他聚合函数。 正确的查询是:

SELECT um.Users_Name,
    pm.Product_Name,
    (SELECT SUM(Transaction_Amount) FROM t_transaction 
    WHERE Transaction_Type='Order' 
    GROUP BY Users_Id,Product_Id) AS Ordered_quantity,
    (SELECT SUM(Transaction_Amount) FROM t_transaction 
    WHERE Transaction_Type='Payment'
    GROUP BY Users_ID,Product_Id )AS Amount_Paid,
    (SELECT MAX(Transaction_Date) FROM t_transaction 
      GROUP BY Users_Id,Product_Id) AS Last_Transaction_Date, -- error 1
     (SELECT ((SUM(Transaction_Amount)* sum(pm.Cost_per_Item))-SUM(Transaction_Amount))) AS 
      Balance -- error 2 and error 3
FROM t_user_master um 
JOIN t_transaction tr ON um.Users_ID=tr.Users_ID
JOIN t_product_master pm ON tr.Product_ID = pm.Product_ID
GROUP BY um.Users_Name,pm.Product_Name ;

希望这有帮助

你能给出准确的错误吗?它应该给出它发现问题的确切点,例如:附近的语法不正确'xxx@ChrisL这是准确的错误消息102,级别15,状态1,第80行“Product_Name”附近的语法不正确…这里第80行指向最后一行您能给出准确的错误吗?它应该给出它发现问题的确切点,例如:附近的语法不正确'xxx@ChrisLL这是准确的错误消息102,级别15,状态1,第80行“Product_Name”附近的语法不正确…此处第80行指向最后一行,即使纠正了该错误,它仍然给出相同的错误。您的子查询也有问题,请从t_事务中选择SUMTransaction_Amount,其中transaction_Type='Order'GROUP BY Users_Id,Product_Id as Ordered_quantity将返回多行。子查询中不允许使用它。您确实需要考虑重写查询。即使更正了该错误,它仍然会给出相同的错误。您的子查询也有问题,请从t_transaction中选择SUMTransaction_Amount,其中transaction_Type=‘Order’GROUP BY Users_Id,作为订购数量的产品标识将返回多行。子查询中不允许使用它。您确实需要重新编写查询。@deepshika我无法了解您对第三个错误所做的更改,以获取您使用的t_product_master.Cost_per_Item值的余额金额。还应将其聚合为标量值,即根据您的要求使用Max、Sum、Min任何函数以获得正确的结果。@deepshika我无法了解您对第三个错误所做的更改,以获取您使用的t_product_master.Cost_per_Item值的余额金额。还应将其聚合为标量值,即根据您的要求使用Max、Sum、Min任何函数来获得正确的结果。