【发布时间】:2023-03-11 16:58:01
【问题描述】:
我是 SQL Server 2012 的新手。这是我的表 DDL 和 DML 脚本。
CREATE TABLE [tbl_item_i18n]
(
[item_id] [int] NOT NULL,
[lang_id] [int] NOT NULL,
[item_text] [nvarchar](max) NULL
);
INSERT INTO [tbl_item_i18n] ([item_id],[lang_id],[item_text])
VALUES (1, 1, 'item1'), (1, 2, 'idem 1'),
(2, 1, 'item2'),
(3, 1, 'item3'), (3, 2, 'idem 3'),
(4, 1, 'item4'), (4, 2, 'idem 4');
我的预期输出是:
这是我尝试过的:
select
lang_id,
case when lang_id = 2 AND itemI18N.item_text is not null then itemI18N.item_text
when lang_id = 1 then itemI18N.item_text
end as ite_texte
from
tbl_item_i18n itemI18N
group by
itemI18N.item_id, lang_id, itemI18N.item_text
但这并没有给我预期的结果。
目的 :- 我想检索lang_id = 2 的数据。如果lang_id = 2 的记录不存在,则检索lang_id = 2 的数据。
如何使用聚合函数检索数据?
【问题讨论】:
-
你想要什么item_name?第一的?最后的?请解释您的期望输出的逻辑是什么。
-
那么
item_name为每个item_id选择的规则是什么? -
请考虑更新的问题。 (目的)
-
我认为您的架构错误(反向)。因为看起来
item_id应该是第一列,lenguaje_id应该是第二列? -
您说“如果 lang_id = 2 的记录不存在,则检索 lang_id = 2 的数据。”。其中一个应该说 lang_id= 1 - 哪个?
标签: sql sql-server-2012 group-by aggregate-functions