gpt4 book ai didi

sql - 为多列选择不同的值

转载 作者:行者123 更新时间:2023-12-01 04:12:43 25 4
gpt4 key购买 nike

我有一个表,其中许多数据与另一列中的数据相匹配,类似于一棵树,然后是关于每个特定叶子的“叶子”中的数据

例如

Food Group      Name       Caloric Value  
Vegetables Broccoli 100
Vegetables Carrots 80
Fruits Apples 120
Fruits Bananas 120
Fruits Oranges 90

我想设计一个查询,只返回每列的不同值,然后返回空值以覆盖溢出

例如
Food group    Name     Caloric Value  
Vegetables Broccoli 100
Fruit Carrots 80
Apples 120
Bananas 90
Oranges

我不确定这是否可能,现在我一直在尝试用案例来做,但是我希望有一种更简单的方法

最佳答案

似乎您只是想拥有所有不同的值(value)。为什么?用于展示目的?这是应用程序的工作,而不是服务器的工作。您可以简单地使用三个这样的查询:

SELECT DISTINCT [Food Group] FROM atable;

SELECT DISTINCT Name FROM atable;

SELECT DISTINCT [Caloric Value] FROM atable;

并相应地显示他们的结果。

但是如果你坚持把它们都放在一张 table 上,你可以试试这个:
WITH atable ([Food Group], Name, [Caloric Value]) AS (
SELECT 'Vegetables', 'Broccoli', 100 UNION ALL
SELECT 'Vegetables', 'Carrots', 80 UNION ALL
SELECT 'Fruits', 'Apples', 120 UNION ALL
SELECT 'Fruits', 'Bananas', 120 UNION ALL
SELECT 'Fruits', 'Oranges', 90
),
atable_numbered AS (
SELECT
[Food Group], Name, [Caloric Value],
fg_rank = DENSE_RANK() OVER (ORDER BY [Food Group]),
n_rank = DENSE_RANK() OVER (ORDER BY Name),
cv_rank = DENSE_RANK() OVER (ORDER BY [Caloric Value])
FROM atable
)
SELECT
fg.[Food Group],
n.Name,
cv.[Caloric Value]
FROM (
SELECT fg_rank FROM atable_numbered UNION
SELECT n_rank FROM atable_numbered UNION
SELECT cv_rank FROM atable_numbered
) r (rank)
LEFT JOIN (
SELECT DISTINCT [Food Group], fg_rank
FROM atable_numbered) fg ON r.rank = fg.fg_rank
LEFT JOIN (
SELECT DISTINCT Name, n_rank
FROM atable_numbered) n ON r.rank = n.n_rank
LEFT JOIN (
SELECT DISTINCT [Caloric Value], cv_rank
FROM atable_numbered) cv ON r.rank = cv.cv_rank
ORDER BY r.rank

关于sql - 为多列选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com