Group-By

如何對行進行分組

  • August 27, 2018

我不明白如何根據某些先決條件從下表中檢索結果。

我有 2 張桌子

表“項目”

| 編號 | 類別 ID | count_view
| -- | ------------| ----------
| 1 | 1 | 100 
| 2 | 2 | 50 
| 3 | 3 | 60 

表“翻譯項目”

| 編號 | 項目 ID | 姓名 | 語言程式碼
| -- | -----------| ----------| ---------
| 1 | 1 | 一些名字1| zh 
| 2 | 1 | 一些名字2| 汝 
| 3 | 2 | 一些名字3| zh 
| 4 | 3 | some name4| ru

結果

我想檢索以下範例中的結果。一個條件是,如果存在預設語言的翻譯,則檢索該語言的名稱,否則檢索任何其他語言。

對於“en”頁面

| 項目 ID | 姓名 | 語言程式碼
| -----------| ----------| ---------
| 1 | 一些名字1| zh 
| 2 | 一些名字3| zh 
| 3 | some name4| ru 

對於“ru”頁面

| 項目 ID | 姓名 | 語言程式碼
| -----------| ----------| ---------
† 1 | 一些名字2| 和 
| 2 | 一些名字3| zh 
| 3 | some name4| ru 

有沒有可能實現我想要的?

我嘗試使用casegroup使用以下語句:

“en”頁面範例

選擇 p.id、t.project_name、t.lang_code、p.count_view
來自項目 p
LEFT JOIN Translation_Projects t
ON t.project_id = p.id
和 lang_code =
(
案子
當 t.lang_code = "en" THEN "en" 
其他“茹”
結尾
)

我正在使用 SQLite。

SET @lang := 'en'; -- or 'ru', dependent by the language you need

SELECT p.id, 
      COALESCE(t1.name,t2.name) name, 
      COALESCE(t1.lang_code,t2.lang_code) lang_code
FROM Projects p
LEFT JOIN Translation_Projects t1  ON t1.project_id = p.id 
                                 AND t1.lang_code  = @lang
LEFT JOIN Translation_Projects t2  ON t2.project_id = p.id 
                                 AND t2.lang_code != @lang

PS。您可以將@lang變數替換為查詢文本中所需的文字,當然,有 2 個靜態查詢、動態 SQL 或帶參數的查詢。

聚苯乙烯。假設永遠不會有第三種語言……

引用自:https://dba.stackexchange.com/questions/215944