SQL&;SQL Server-非规范化表,按复杂查询进行区分和排序
我最近一直在这方面工作,但我无法解决它。我有下表:SQL&;SQL Server-非规范化表,按复杂查询进行区分和排序,sql,sql-server,select,sql-order-by,distinct,Sql,Sql Server,Select,Sql Order By,Distinct,我最近一直在这方面工作,但我无法解决它。我有下表: ID Language Text ---- -------- -------- 1 spanish Hola 1 english Hello 2 spanish Chau 2 english Goodbye 2 french Au revoir 3 english Thank you 我需要得到每个身份证一次,并在西班
ID Language Text
---- -------- --------
1 spanish Hola
1 english Hello
2 spanish Chau
2 english Goodbye
2 french Au revoir
3 english Thank you
我需要得到每个身份证一次,并在西班牙语文本,但如果没有任何文本在西班牙语,我应该得到一个英语,以此类推
因此,如果我运行此查询,我将得到:
ID Language Text
---- -------- --------
1 spanish Hola
2 spanish Chau
3 english Thank you
我不能用
Select ID, Language, Text From table Where Language = 'spanish'
因为在没有西班牙语集的情况下,我不会检索该ID,并且每个ID需要一条记录。我想可能会使用类似以下内容:
select Distinct(Id), Text from table
order by FIELD(Language, 'Spanish', 'English', 'French', 'Italian')
但它不起作用。我得到:
'FIELD' is not a recognized built-in function name.
有人能帮我吗
非常感谢大家 对于这种类型的优先级排序,您可以使用
行编号()
:
对于这种类型的优先级排序,您可以使用
行编号()
:
对于这种类型的优先级排序,您可以使用
行编号()
:
对于这种类型的优先级排序,您可以使用
行编号()
:
此解决方案(或对COALESCE
的等效替代方案)适用于我所知的任何SQL变体
此解决方案(或对COALESCE
的等效替代方案)适用于我所知的任何SQL变体
此解决方案(或对COALESCE
的等效替代方案)适用于我所知的任何SQL变体
此解决方案(或等效的COALESCE替代方案)适用于我所知的任何SQL变体这是另一个选项:
SELECT i.ID, w.Text
FROM (
SELECT ID
FROM Words
GROUP BY ID) i(ID)
CROSS APPLY (
SELECT TOP 1 [Text]
FROM Words
WHERE ID = i.ID AND [Language] IN ('spanish', 'english')
ORDER BY (CASE [Language] WHEN 'spanish' THEN 1
ELSE 2
END)
) w([Text])
对于
单词
表中包含的每个ID,我们执行交叉应用
,以找到符合OP设置标准的匹配文本。这是另一个选项:
SELECT i.ID, w.Text
FROM (
SELECT ID
FROM Words
GROUP BY ID) i(ID)
CROSS APPLY (
SELECT TOP 1 [Text]
FROM Words
WHERE ID = i.ID AND [Language] IN ('spanish', 'english')
ORDER BY (CASE [Language] WHEN 'spanish' THEN 1
ELSE 2
END)
) w([Text])
对于单词
表中包含的每个ID,我们执行交叉应用
,以找到符合OP设置标准的匹配文本。这是另一个选项:
SELECT i.ID, w.Text
FROM (
SELECT ID
FROM Words
GROUP BY ID) i(ID)
CROSS APPLY (
SELECT TOP 1 [Text]
FROM Words
WHERE ID = i.ID AND [Language] IN ('spanish', 'english')
ORDER BY (CASE [Language] WHEN 'spanish' THEN 1
ELSE 2
END)
) w([Text])
对于单词
表中包含的每个ID,我们执行交叉应用
,以找到符合OP设置标准的匹配文本。这是另一个选项:
SELECT i.ID, w.Text
FROM (
SELECT ID
FROM Words
GROUP BY ID) i(ID)
CROSS APPLY (
SELECT TOP 1 [Text]
FROM Words
WHERE ID = i.ID AND [Language] IN ('spanish', 'english')
ORDER BY (CASE [Language] WHEN 'spanish' THEN 1
ELSE 2
END)
) w([Text])
对于Words
表中包含的每个ID,我们执行交叉应用
,以查找满足OP设置的条件的匹配文本
。那么,字段()
应该做什么?当没有西班牙语条目时,您希望查询返回什么?@Lamakfield()
是MySQL中的一个函数,相当于SQL Server中的choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:field()
应该做什么?当没有西班牙语条目时,你希望查询返回什么?@Lamakfield()
是MySQL中的一个函数,相当于SQL Server中的choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:field()
应该做什么?当没有西班牙语条目时,你希望查询返回什么?@Lamakfield()
是MySQL中的一个函数,相当于SQL Server中的choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:field()
应该做什么?当没有西班牙语条目时,你希望查询返回什么?@Lamakfield()
是MySQL中的一个函数,相当于SQL Server中的choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:这个解决方案工作得很好。谢谢你Girgos Betost这个解决方案非常有效。谢谢你Girgos Betost这个解决方案非常有效。谢谢你Girgos Betost这个解决方案非常有效。谢谢你,女孩们,贝托斯尼斯!我不知道聚结方法的存在!我不知道聚结方法的存在!我不知道聚结方法的存在!我不知道聚结的存在它怎么不起作用?这就是我在SQL Server中对列表进行优先级排序的方式。它是如何不起作用的?这就是我在SQL Server中对列表进行优先级排序的方式。它是如何不起作用的?这就是我在SQL Server中对列表进行优先级排序的方式。它是如何不起作用的?这就是我在SQL Server中对列表进行优先级排序的方式。