Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL&;SQL Server-非规范化表,按复杂查询进行区分和排序_Sql_Sql Server_Select_Sql Order By_Distinct - Fatal编程技术网

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设置的条件的匹配
文本

那么,
字段()
应该做什么?当没有西班牙语条目时,您希望查询返回什么?@Lamak
field()
是MySQL中的一个函数,相当于SQL Server中的
choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:
field()
应该做什么?当没有西班牙语条目时,你希望查询返回什么?@Lamak
field()
是MySQL中的一个函数,相当于SQL Server中的
choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:
field()
应该做什么?当没有西班牙语条目时,你希望查询返回什么?@Lamak
field()
是MySQL中的一个函数,相当于SQL Server中的
choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:
field()
应该做什么?当没有西班牙语条目时,你希望查询返回什么?@Lamak
field()
是MySQL中的一个函数,相当于SQL Server中的
choose()
。@GordonLinoff啊,MySQL,我对此一无所知。看看这个:这个解决方案工作得很好。谢谢你Girgos Betost这个解决方案非常有效。谢谢你Girgos Betost这个解决方案非常有效。谢谢你Girgos Betost这个解决方案非常有效。谢谢你,女孩们,贝托斯尼斯!我不知道聚结方法的存在!我不知道聚结方法的存在!我不知道聚结方法的存在!我不知道聚结的存在它怎么不起作用?这就是我在SQL Server中对列表进行优先级排序的方式。它是如何不起作用的?这就是我在SQL Server中对列表进行优先级排序的方式。它是如何不起作用的?这就是我在SQL Server中对列表进行优先级排序的方式。它是如何不起作用的?这就是我在SQL Server中对列表进行优先级排序的方式。