SQL Server 查询与按字段错误分组

问题描述

我有下表import React,{useState,useEffect} from 'react'; import { Text,View,StyleSheet,Button } from 'react-native'; import Constants from 'expo-constants'; export default function App() { const [showStatusbar,setShowStatusbar] = useState(true) useEffect(() => { setTimeout(() => { setShowStatusbar(false) },3000) },[]) return ( <View style={styles.container}> { showStatusbar ? <View style = {styles.statusBar}> <Text>Status Bar</Text> </View> : null } <Button title = "Show Status bar" onPress = {() => setShowStatusbar(true)}/> </View> ); } const styles = StyleSheet.create({ container: { flex: 1,backgroundColor: '#ecf0f1',},statusBar: { height: 50,backgroundColor:'lightblue',justifyContent:'center',alignItems:'center' } });

MyTable

我想查询 id │ value_two │ value_three │ value_four ────┼───────────┼─────────────┼──────────── 1 │ a │ A │ AA 2 │ a │ A2 │ AA2 3 │ b │ A3 │ AA3 4 │ a │ A4 │ AA4 5 │ b │ A5 │ AA5 分组的对象数组 { value_three,value_four }value_two 应该单独出现在结果中。结果应该是这样的:

value_two

在 postgress 我可以这样做:

 value_two │                                                                                    value_four                                                                                 
───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 a         │ [{"value_three":"A","value_four":"AA"},{"value_three":"A2","value_four":"AA2"},{"value_three":"A4","value_four":"AA4"}]
 b         │ [{"value_three":"A3","value_four":"AA3"},{"value_three":"A5","value_four":"AA5"}]

但在 sql SERVER 中我得到 SELECT value_two,json_agg(row_to_json((value_three,value_four)::foo)) AS value_four FROM mytable GROUP BY value_two

sql SERVER 上与此等效的是什么。有人可以帮我吗?

解决方法

如果您使用的是 SQL Server 2016+,您可以尝试使用 FOR JSON

表格:

SELECT *
INTO Data
FROM (VALUES
   (1,'a','A','AA'),(2,'A2','AA2'),(3,'b','A3','AA3'),(4,'A4','AA4'),(5,'A5','AA5')
) v (id,value_two,value_three,value_four)

声明:

SELECT DISTINCT d.value_two,j.value_four
FROM Data d
OUTER APPLY (
   SELECT value_three,value_four
   FROM Data
   WHERE value_two = d.value_two
   FOR JSON AUTO
) j (value_four)

结果:

value_two value_four
a         [{"value_three":"A","value_four":"AA"},{"value_three":"A2","value_four":"AA2"},{"value_three":"A4","value_four":"AA4"}]
b         [{"value_three":"A3","value_four":"AA3"},{"value_three":"A5","value_four":"AA5"}]