簡體   English   中英

如何計算列中包含'Q1'的數據庫中的真值數

[英]How to count the number of true values in database where the column contains 'Q1'

我在訪問數據庫中有一個表,其中包含Q1-Easy Q1-Med和Q1-Hard列。 對於選定的用戶名,我需要計算包含真值的列數。

這個SQL語句會起作用嗎? 或者有更優雅的方式嗎?

string Q1Query = "SELECT COUNT from tbl_Results WHERE ([Q1-Easy] OR [Q1-Med] OR [Q1-Hard] && [Username]) = + selectedUsername + "'";

我只知道SQL中的基礎知識,而且我在C#.NET中工作

您的查詢並不是太遠了。 你想要的是什么

string Q1Query = "SELECT COUNT(*) from tbl_Results WHERE ([Q1-Easy] = 'Y' OR [Q1-Med] = 'Y' OR [Q1-Hard] = 'Y') && [Username] = '" + selectedUsername + "'";

(假設你的“真實價值”是'Y'。)

話雖這么說,在C#中嵌入SQL並通過字符串連接構建它是一個壞主意。 它允許惡意輸入的可能性,例如selectedUsername包含值"Bobby'; DROP TABLE Students" 一個更好的做法是參數化查詢並讓數據庫代碼放入用戶名或更好,將整個查詢放入存儲過程。

為了避免SQL注入漏洞,您需要將查詢更改為以下內容:

string Q1Query = "SELECT COUNT(*) from tbl_Results WHERE ([Q1-Easy] = 'Y' OR [Q1-Med] = 'Y' OR [Q1-Hard] = 'Y') && [Username] = '@username'";

(注意刪除用戶名的串聯。)

然后你實際上用這樣的東西運行它:

SqlCommand cmd = new SqlCommand(Q1Query);
cmd.Parameters.Add("@username", selectedUsername);
SqlDataReader reader = cmd.ExecuteReader();

好吧,如果你想計算真正的列數,你將需要類似下面的內容。 請注意,我假設'Y'值表示正確...如果您使用位列,則必須進行細微更改。 我也假設您使用的是SQL Server,如果不是這種情況,則此語法可能對您不起作用。

   SELECT 
      CASE Q1-Easy WHEN 'Y' THEN 1 ELSE 0 END + 
      CASE Q1-Med  WHEN 'Y' THEN 1 ELSE 0 END + 
      CASE Q1-Hard WHEN 'Y' THEN 1 ELSE 0 END AS TrueCount
   FROM tbl_Results
   WHERE ([Username] = @username)

對於MS Access,它將類似於以下(未經測試)......

   SELECT 
      IIF([Q1-Easy] = 'Y', 1, 0) + 
      IIF([Q1-Med] = 'Y', 1, 0) +
      IIF([Q1-Hard] = 'Y', 1, 0) AS TrueCount
   FROM tbl_Results
   WHERE ([Username] = @username)

括號在查詢中是錯誤的。 這是你想要的形式:

SELECT COUNT(*)
from tbl_Results
WHERE ([Q1-Easy] = 'TRUE' OR [Q1-Med] = 'TRUE' OR [Q1-Hard] = 'TRUE') AND
      ([Username] = + selectedUsername)

我不確定您的數據中是如何表示“真實”的,因此值可能會有所不同。

與您的幾乎相同,只是進行了一些微小而重要的修正:

string Q1Query = "SELECT [UserName], COUNT(*) as ToTalTrueQuestions 
FROM tbl_Results WHERE ([Q1-Easy] OR [Q1-Med] OR [Q1-Hard]) 
AND [Username] = '" +    selectedUsername + "'";

區別在於我包括與計數關聯的用戶名,第二個計數具有別名,第三個使用括號錯誤我在[Q1-Hard]之后放置右括號“ ) ”而不是[用戶名] ],第四,我使用AND代替SQL而不是&& C代表C#,最后在"="之后有一個單引號,即"= '"應該是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM