按 lang_type 获取记录,如果不存在则获取默认语言
Get records by lang_type if not present then get default lang
我有如下需求
-------------------------
| Label_Id | Lang_Type |
-------------------------
| Label1 | EN |
-------------------------
| Label2 | EN |
-------------------------
| Label2 | DE |
-------------------------
| Label3 | EN |
-------------------------
| Label4 | EN |
-------------------------
| Label4 | DE |
-------------------------
| Label5 | EN |
-------------------------
并且预期的输出是如果我们查询 Lang_Type = DE
然后我们每个 Label_Id 得到一行,即如果 DE 可用则 return 否则 return 该标签的 EN 行。
-------------------------
| Label_Id | Lang_Type |
-------------------------
| Label1 | EN |
-------------------------
| Label2 | DE |
-------------------------
| Label3 | EN |
-------------------------
| Label4 | DE |
-------------------------
| Label5 | EN |
-------------------------
有人可以指导我如何使用当前的 table 结构满足此要求,还是应该对 table 结构进行标准化或其他。
谢谢!!!
select label_ID,count(label_ID) Label_count into #LabelCount
from table_name
group by label_ID
select O.label_ID,O.Lang_Type into #O2
from table_name O
inner join #LabelCount LC on O.label_ID=LC.label_ID
where LC.Label_count=2 AND O.Lang_Type='DE'
select O.label_ID,O.Lang_Type into #O3
from table_name O
inner join #LabelCount LC on O.label_ID=LC.label_ID
where LC.Label_count=1
select * from (
select label_ID,Lang_Type from #O2
UNION
select label_ID,Lang_Type from #O3 ) AS ANSWER
DROP TABLE #LabelCount
DROP TABLE #O2
DROP TABLE #O3
这可能会为您提供所需的输出
我有如下需求
-------------------------
| Label_Id | Lang_Type |
-------------------------
| Label1 | EN |
-------------------------
| Label2 | EN |
-------------------------
| Label2 | DE |
-------------------------
| Label3 | EN |
-------------------------
| Label4 | EN |
-------------------------
| Label4 | DE |
-------------------------
| Label5 | EN |
-------------------------
并且预期的输出是如果我们查询 Lang_Type = DE 然后我们每个 Label_Id 得到一行,即如果 DE 可用则 return 否则 return 该标签的 EN 行。
-------------------------
| Label_Id | Lang_Type |
-------------------------
| Label1 | EN |
-------------------------
| Label2 | DE |
-------------------------
| Label3 | EN |
-------------------------
| Label4 | DE |
-------------------------
| Label5 | EN |
-------------------------
有人可以指导我如何使用当前的 table 结构满足此要求,还是应该对 table 结构进行标准化或其他。
谢谢!!!
select label_ID,count(label_ID) Label_count into #LabelCount
from table_name
group by label_ID
select O.label_ID,O.Lang_Type into #O2
from table_name O
inner join #LabelCount LC on O.label_ID=LC.label_ID
where LC.Label_count=2 AND O.Lang_Type='DE'
select O.label_ID,O.Lang_Type into #O3
from table_name O
inner join #LabelCount LC on O.label_ID=LC.label_ID
where LC.Label_count=1
select * from (
select label_ID,Lang_Type from #O2
UNION
select label_ID,Lang_Type from #O3 ) AS ANSWER
DROP TABLE #LabelCount
DROP TABLE #O2
DROP TABLE #O3
这可能会为您提供所需的输出