Sql server SQL Server-显示数据“向下”
我有一张这样的桌子:Sql server SQL Server-显示数据“向下”,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我有一张这样的桌子: CREATE TABLE #Categories (CategoryText VARCHAR(50), CategoryUrl VARCHAR(50), SubCategoryText VARCHAR(50), SubCategoryUrl VARCHAR(50)) INSERT INTO #Categories SELECT 'Lighting', 'http://lighting.com', 'Chandeliers', 'http://chandeliers.com'
CREATE TABLE #Categories (CategoryText VARCHAR(50), CategoryUrl VARCHAR(50), SubCategoryText VARCHAR(50), SubCategoryUrl VARCHAR(50))
INSERT INTO #Categories SELECT 'Lighting', 'http://lighting.com', 'Chandeliers', 'http://chandeliers.com'
INSERT INTO #Categories SELECT 'Lighting', 'http://lighting.com', 'Lamps', 'http://lamps.com'
INSERT INTO #Categories SELECT 'Hardware', 'http://hardware.com', 'Hooks', 'http://hooks.com'
INSERT INTO #Categories SELECT 'Hardware', 'http://hardware.com', 'Hinges', 'http://hinges.com'
这看起来像:
CategoryText CategoryUrl SubCategoryText SubCategoryUrl
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
Lighting http://lighting.com Chandeliers http://chandeliers.com
Lighting http://lighting.com Lamps http://lamps.com
Hardware http://hardware.com Hooks http://hooks.com
Hardware http://hardware.com Hinges http://hinges.com
我将如何动态显示数据,如下所示:
Type Text Url
----------- -------------------------------------------------- --------------------------------------------------
Category Lighting http://lighting.com
SubCategory Chandeliers http://chandeliers.com
SubCategory Lamps http://lamps.com
Category Hardware http://hardware.com
SubCategory Hinges http://hinges.com
SubCategory Hooks http://hooks.com
我还需要保持类别和子类别的正确顺序
我想到了UNPIVOT,但我不知道如何在这里应用它,因为数据结构/需求与大多数示例不同
感谢您的帮助。尝试以下方法:
select distinct
Type = 'Category',
Parent = CategoryText,
Text = CategoryText,
Url = CategoryUrl
from #Categories
union all
select
Type = 'SubCategory',
Parent = CategoryText,
Text = SubCategoryText,
Url = SubCatgoryUrl
from #Categories
order by Parent,Type,Text
试试这个:
select distinct
Type = 'Category',
Parent = CategoryText,
Text = CategoryText,
Url = CategoryUrl
from #Categories
union all
select
Type = 'SubCategory',
Parent = CategoryText,
Text = SubCategoryText,
Url = SubCatgoryUrl
from #Categories
order by Parent,Type,Text
这应该适用于你…使用具有排名功能的联合
select CASE WHEN SubCategoryText IS NULL THEN 'Category' ELSE 'SubCategory' END as Type,
CASE WHEN SubCategoryText IS NULL THEN CategoryText ELSE SubCategoryText END as Type,
CategoryUrl
from (
select *, RANK() OVER (ORDER BY CategoryText, SubCategoryText) AS Rank
from (
select CategoryText, null as SubCategoryText, CategoryUrl
from #Categories
union
select CategoryText, SubCategoryText, SubCategoryUrl
from #Categories
)a)b
order by Rank
这应该适用于你…使用具有排名功能的联合
select CASE WHEN SubCategoryText IS NULL THEN 'Category' ELSE 'SubCategory' END as Type,
CASE WHEN SubCategoryText IS NULL THEN CategoryText ELSE SubCategoryText END as Type,
CategoryUrl
from (
select *, RANK() OVER (ORDER BY CategoryText, SubCategoryText) AS Rank
from (
select CategoryText, null as SubCategoryText, CategoryUrl
from #Categories
union
select CategoryText, SubCategoryText, SubCategoryUrl
from #Categories
)a)b
order by Rank
我保持了类别和子类别的顺序,使这项工作得以进行 我使用@SliverNinja的CASE语句来获得正确的类型和文本 对于排序,我添加了两列CategorySortOrder和SubCategorySortOrder。我组合了类别和子类别排序器来创建一个新的单排序器列。然后,我按照该列进行分组和排序,以获得最终结果
CREATE TABLE #Categories (CategoryText VARCHAR(50), CategoryUrl VARCHAR(50), CategorySortOrder INT,SubCategoryText VARCHAR(50), SubCategoryUrl VARCHAR(50), SubCategorySortOrder INT)
INSERT INTO #Categories SELECT 'Lighting', 'http://lighting.com', 1, 'Chandeliers', 'http://chandeliers.com',1
INSERT INTO #Categories SELECT 'Lighting', 'http://lighting.com', 1, 'Lamps', 'http://lamps.com' , 2
INSERT INTO #Categories SELECT 'Hardware', 'http://hardware.com', 2 ,'Hooks', 'http://hooks.com' ,1
INSERT INTO #Categories SELECT 'Hardware', 'http://hardware.com', 2,'Hinges', 'http://hinges.com' ,2
SELECT
Type
, Text
, Url
, MIN(SortOrder)[SortOrder]
INTO
#cats
FROM
(
SELECT
CASE WHEN SubCategoryText IS NULL THEN 'Category' ELSE 'SubCategory' END [Type]
, CASE WHEN SubCategoryText IS NULL THEN CategoryText ELSE SubCategoryText END [Text]
, [Url]
, CASE WHEN SubCategoryText IS NULL THEN CAST(CAST(CategorySortOrder AS VARCHAR) + CAST(SubCategorySortOrder AS VARCHAR) AS NUMERIC) ELSE CAST(CAST(CategorySortOrder AS VARCHAR) + CAST(SubCategorySortOrder AS VARCHAR) AS NUMERIC) + 1 END[SortOrder]
FROM
(
SELECT
CategoryText
, NULL [SubCategoryText]
, CategoryUrl [Url]
, CategorySortOrder
, SubCategorySortOrder
FROM
#Categories
UNION ALL
SELECT
CategoryText
, SubCategoryText
, SubCategoryUrl
, CategorySortOrder
, SubCategorySortOrder
FROM
#Categories
)t
)t
GROUP BY
Type
, Text
, Url
ORDER BY
SortOrder
SELECT
Type
, Text
, Url
FROM
#Cats
我保持了类别和子类别的顺序,使这项工作得以进行 我使用@SliverNinja的CASE语句来获得正确的类型和文本 对于排序,我添加了两列CategorySortOrder和SubCategorySortOrder。我组合了类别和子类别排序器来创建一个新的单排序器列。然后,我按照该列进行分组和排序,以获得最终结果
CREATE TABLE #Categories (CategoryText VARCHAR(50), CategoryUrl VARCHAR(50), CategorySortOrder INT,SubCategoryText VARCHAR(50), SubCategoryUrl VARCHAR(50), SubCategorySortOrder INT)
INSERT INTO #Categories SELECT 'Lighting', 'http://lighting.com', 1, 'Chandeliers', 'http://chandeliers.com',1
INSERT INTO #Categories SELECT 'Lighting', 'http://lighting.com', 1, 'Lamps', 'http://lamps.com' , 2
INSERT INTO #Categories SELECT 'Hardware', 'http://hardware.com', 2 ,'Hooks', 'http://hooks.com' ,1
INSERT INTO #Categories SELECT 'Hardware', 'http://hardware.com', 2,'Hinges', 'http://hinges.com' ,2
SELECT
Type
, Text
, Url
, MIN(SortOrder)[SortOrder]
INTO
#cats
FROM
(
SELECT
CASE WHEN SubCategoryText IS NULL THEN 'Category' ELSE 'SubCategory' END [Type]
, CASE WHEN SubCategoryText IS NULL THEN CategoryText ELSE SubCategoryText END [Text]
, [Url]
, CASE WHEN SubCategoryText IS NULL THEN CAST(CAST(CategorySortOrder AS VARCHAR) + CAST(SubCategorySortOrder AS VARCHAR) AS NUMERIC) ELSE CAST(CAST(CategorySortOrder AS VARCHAR) + CAST(SubCategorySortOrder AS VARCHAR) AS NUMERIC) + 1 END[SortOrder]
FROM
(
SELECT
CategoryText
, NULL [SubCategoryText]
, CategoryUrl [Url]
, CategorySortOrder
, SubCategorySortOrder
FROM
#Categories
UNION ALL
SELECT
CategoryText
, SubCategoryText
, SubCategoryUrl
, CategorySortOrder
, SubCategorySortOrder
FROM
#Categories
)t
)t
GROUP BY
Type
, Text
, Url
ORDER BY
SortOrder
SELECT
Type
, Text
, Url
FROM
#Cats
有没有办法保持原来的秩序,首先是照明类别?如果有一个排序栏会有帮助吗?SliverNinja下面的回答演示了排名功能的使用。谢谢大家-我知道只要我有一个排序栏,它就可以与提供的所有答案一起工作。现在是最难的部分。。答案是:有没有一种方法可以保持原有的秩序,首先是照明类别?如果有一个排序栏会有帮助吗?SliverNinja下面的回答演示了排名功能的使用。谢谢大家-我知道只要我有一个排序栏,它就可以与提供的所有答案一起工作。现在是最难的部分。。哪一个可以作为答案:PSorry伙计们,我意识到,子类别的排序规则没有被保留。除了父类别的排序器,还有没有办法保留子类别的排序器?对不起,伙计们,我意识到,子类别的排序器没有被保留。除了父类别的排序器外,是否有方法保留子类别的排序器?