2017-09-16 106 views
0

我的查询是:我想改变我的表从第一次显示窗体第二显示形式

SELECT 
    ROUND(AVG([Q]), 1) AS ABC, 
    (SELECT ROUND(AVG([Q]), 1) 
    FROM [Apple] 
    WHERE [Name] = 'DND' AND [Color] = 'Blue') AS 'Internal', 
    (SELECT ROUND(AVG([Q]), 1) 
    FROM [Apple] 
    WHERE [Name] = 'DND' AND [Color] = 'Green') AS EXTERNAL 
FROM 
    [Apple] 
WHERE 
    [Fruit] = '125' 

UNION ALL 

SELECT 
    ROUND(EXP(AVG(LOG([Q]))), 1) AS ABC, 
    (SELECT ROUND(EXP(AVG(LOG([Q]))), 1) 
    FROM [Apple] 
    WHERE [Name] = 'DND' AND [Color] = 'Blue') AS 'Internal', 
    (SELECT ROUND(EXP(AVG(LOG([Q]))), 1) 
    FROM [Apple] 
    WHERE [Name] = 'DND' AND [Color] = 'Green') AS EXTERNAL 
FROM 
    [Apple] 
WHERE 
    [Q] != 0 

结果:

ABC Internal EXTERNAL 
------------------------- 
5.6 5.9   6.3 
4  4.4   4.8 

和预期的结果是:

 ABC Internal EXTERNAL 
--------------------------------- 
X  5.6 5.9  6.3 
Y  4.1 4.4  4.8 

请提供有关如何为在SQL Server中获得的结果集的行添加名称的查询。

回答

0

也许这就是你所需要的

SELECT 
'first' as ResultSet, 
ROUND(AVG([Q]), 1) AS ABC, 
(SELECT ROUND(AVG([Q]), 1) 
FROM [Apple] 
WHERE [Name] = 'DND' AND [Color] = 'Blue') AS 'Internal', 
(SELECT ROUND(AVG([Q]), 1) 
FROM [Apple] 
WHERE [Name] = 'DND' AND [Color] = 'Green') AS EXTERNAL 
FROM 
    [Apple] 
WHERE 
    [Fruit] = '125' 

UNION ALL 

SELECT 
'second' as ResultSet, 
    ROUND(EXP(AVG(LOG([Q]))), 1) AS ABC, 
    (SELECT ROUND(EXP(AVG(LOG([Q]))), 1) 
    FROM [Apple] 
    WHERE [Name] = 'DND' AND [Color] = 'Blue') AS 'Internal', 
    (SELECT ROUND(EXP(AVG(LOG([Q]))), 1) 
    FROM [Apple] 
    WHERE [Name] = 'DND' AND [Color] = 'Green') AS EXTERNAL 
FROM 
    [Apple] 
WHERE 
    [Q] != 0 
+0

谢谢米哈伊尔对你的回应。它按预期工作。 – Bhargav

0

可以使用的情况下,当语句,如:

CREATE TABLE AR 
(
    ABC DECIMAL(4,2), 
    INTERNAL DECIMAL(4,2), 
    External1 DECIMAL(4,2) 
) 

INSERT INTO AR 
VALUES (5.6, 5.9, 6.3), (4, 4.4, 4.8) 

SELECT 
    CASE 
     WHEN ABC = 5.60 THEN 'X' 
     ELSE 'Y' 
    END, * 
FROM 
    AR 
+0

的列中的值不断变化。所以我们不能根据这些值对逻辑进行硬编码。 – Bhargav

+0

增加了另外一种方法 –

0
--Added all records in #temp table 
SELECT 
--CASE WHEN ABC=5.60 THEN 'X' 
--ELSE 'Y' END, 
* INTO #temp FROM AR 

--create surrogate key using identity column 
Alter table #temp 
add idnty int identity(1,1) 

--add condition using identity column 
SELECT 
CASE WHEN idnty=1 THEN 'X' 
ELSE 'Y' END, ABC, INTERNAL, External1 FROM #temp 

drop table #temp 
+0

谢谢Piyush回复 – Bhargav

相关问题