简体   繁体   English

我正在为所有行获取相同的列计数如何在SQL中有效地计算列值的出现次数?

[英]I'm Getting Count of a column same for all rows?How to count occurrences of a column value efficiently in SQL?

Select 
       Sales_Detail.Serial_No
       ,Sales_Detail.Tax_Percentage
       ,Card_Amount
       ,Cash_Amount
       ,ISNULL((Select  Count(DISTINCT  Tax_Percentage) From Sales_Detail
        Left Join Sales_Master  ON 
        Sales_Master.Serial_No=Sales_Detail.Serial_No
        Where Sales_Master.Invoice_Date = '14-Feb-2019' 
       And IsSaved='True'And IsCancelled = 'False'
       And Card_Amount >0 Or Sales_Master.Cash_Amount>0 
       And Sales_Detail.Serial_No=10467),1) As Count_Tax    

From Sales_Detail    
Inner Join Item_Master On Sales_Detail.Item_ID = Item_Master.Item_ID
Inner Join Item_Brand On Item_Master.Brand_ID = Item_Brand.Brand_ID
Inner Join Sales_Master On Sales_Detail.Serial_No=Sales_Master.Serial_No
left Join Customer C on C.Customer_ID =Sales_Master.Customer_ID     
Inner Join Tax On Tax.Tax_Percentage=Sales_Detail.Tax_Percentage 

Where Sales_Master.Invoice_Date = '14-Feb-2019' And IsSaved = 'True' 
And IsCancelled = 'False'
order by Sales_Detail.SGST_Percentage ,Tax_Percentage

While taking count from above query. 从上面的查询中计数时。 I'm getting count as 2 for all row .Why is it so?? 我将所有行的计数都设为2。为什么会这样呢? If above select in the query expected the output count as 2 for all rows , But actually I want to set count as 1 for serial No 10467 and count as 2 for serial No 10468. 如果在查询中选择以上选项,则期望所有行的输出计数为2,但是实际上我想将序列号10467的计数设置为1,并将序列号10468的计数设置为2。

Select
     Count(DISTINCT Tax_Percentage)
  From Sales_Detail

  Left Join Sales_Master ON Sales_Master.Serial_No=Sales_Detail.Serial_No

  Where Sales_Master.Invoice_Date = '14-Feb-2019'
  And IsSaved='True'And IsCancelled = 'False'
  And Card_Amount >0 Or Sales_Master.Cash_Amount>0
  And Sales_Detail.Serial_No=10467

enter image description here 在此处输入图片说明

In your select you are hardcoding the Searial_No And Sales_Detail.Serial_No=10467 so for each row you will get the same value. 在您的选择中,您要对Searial_No And Sales_Detail.Serial_No=10467进行硬编码,因此对于每一行,您将获得相同的值。

Change your like following. 更改您喜欢的内容。

Select 
       Sales_Detail.Serial_No
       ,Sales_Detail.Tax_Percentage
       ,Card_Amount
       ,Cash_Amount
       ,ISNULL((Select  Count(DISTINCT  Tax_Percentage) From Sales_Detail SD
        Left Join Sales_Master  ON 
        Sales_Master.Serial_No=SD.Serial_No
        Where Sales_Master.Invoice_Date = '14-Feb-2019' 
       And IsSaved='True'And IsCancelled = 'False'
       And Card_Amount >0 Or Sales_Master.Cash_Amount>0 
       And SD.Serial_No=Sales_Detail.Serial_No     
       ),1) As Count_Tax    

From Sales_Detail    
Inner Join Item_Master On Sales_Detail.Item_ID = Item_Master.Item_ID
Inner Join Item_Brand On Item_Master.Brand_ID = Item_Brand.Brand_ID
Inner Join Sales_Master On Sales_Detail.Serial_No=Sales_Master.Serial_No
left Join Customer C on C.Customer_ID =Sales_Master.Customer_ID     
Inner Join Tax On Tax.Tax_Percentage=Sales_Detail.Tax_Percentage 

Where Sales_Master.Invoice_Date = '14-Feb-2019' And IsSaved = 'True' 
And IsCancelled = 'False'
order by Sales_Detail.SGST_Percentage ,Tax_Percentage

Suggestion : As a good practice always use alias names for your table so that it can be easily used at multiple places without confusion. 建议 :好的做法是始终为表使用别名,以便可以在多个位置轻松使用它而不会引起混淆。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM