2017-05-19 28 views
-2

我有一个数据是这样的数据表:集团如列在SQL Server中的行

Data   category 
------------------------ 
apple  fruits 
spinach  vegetables 
mango  fruits 
lion   animals 
grapes  fruits 
tiger  animals 
potato  vegetables 

,我想一个查询,显示的数据如下:

vegetables 
spinach 
potato 
fruits 
mango    
grapes 
animals 
lion  
tiger 
+0

我不明白这一点。你想要什么?我没有看到数据和类别之间的关系 – Arion

回答

2

首先你有正确的设计模式,我认为这可能帮助你

IF OBJECT_ID('dbo.category') IS NOT NULL 
    DROP TABLE category 

CREATE TABLE category (
    categoryID INT Identity PRIMARY KEY 
    ,categoryName VARCHAR(200) 
    ) 

INSERT INTO category(categoryName) 
SELECT 'fruits' Union all 
SELECT 'vegetables'Union all 
SELECT 'animals' 

SELECT * from category 


IF OBJECT_ID('dbo.Datacategory') IS NOT NULL 
Drop Table Datacategory 

CREATE TABLE Datacategory (
    DatacategoryID INT Identity 
    ,categoryID INT CONSTRAINT FK_Datacategory_category FOREIGN KEY REFERENCES category(categoryID) 
    ,Data VARCHAR(200) 
    ) 

INSERT INTO Datacategory(Data,categoryID) 
SELECT  'apple' ,1 Union all 
SELECT  'spinach' ,2 Union all 
SELECT  'mango' ,1 Union all 
SELECT  'lion'  ,3 Union all 
SELECT  'grapes' ,1 Union all 
SELECT  'tiger' ,3 Union all 
SELECT  'potato' ,2 

查询以获得期望的结果

SELECT ISNULL(CAST(NULLIF(CASE 
        WHEN RNo = 1 
         THEN categoryID 
        ELSE '' 
        END, '') AS VARCHAR), '') AS categoryID 
    ,Data 
FROM (
    SELECT D.categoryID 
     ,D.Data 
     ,ROW_NUMBER() OVER (
      PARTITION BY D.categoryID ORDER BY D.categoryID 
      ) AS Rno 
    FROM Datacategory d 
    INNER JOIN category c ON c.categoryID = d.categoryID 
    ) Dt 
ORDER BY Dt.categoryID 

输出

categoryID Data 
---------------- 
1   apple 
      mango 
      grapes 
2   potato 
      spinach 
3   lion 
      tiger