2017-09-25 37 views
1

我有列的表之前的查询结果的列:SQL服务器:选择表中的所有记录时,从三列值在

ID   Date   Code Amt Type 
1   6/1/17   56  100.0  A 
2   6/3/17   57  200.0  B 
3   6/5/17   58  300.0  C 
4   6/7/17   59  400.0  D 

基于以前的查询运行,我收到此结果:

ID  Date  Code 
1  6/1/17  56  
2  6/3/17  57 

我需要运行,抓住所有记录基于从上面的查询结果的第一列,在某种选择一个选择查询,将只返回:

ID  Date  Code Amt Type 
1  6/1/17  56  100.0  A 
2  6/3/17  57  200.0  B 
+4

提示:'INNER JOIN'。 –

回答

0

假设你有一个表TblYours

你可以写类似下面

select * from 
TblYours T join 
(
    select ID, Date, Code from #yourQuery -- replace the inner query with your query 
) T2 
ON T.ID=T2.ID 
AND T.Date=T2.Date 
AND T.Code= T2.Code 
0

你可以做一个查询CTE,如:

DECLARE @T TABLE (ID INT,  Date DATE,  Code INT, Amt DECIMAL(4,1), Type CHAR(1)); 
INSERT INTO @T VALUES 
(1,   '2017-01-06',   56,  100,  'A'), 
(2,   '2017-03-06',   57,  200,  'B'), 
(3,   '2017-05-06',   58,  300,  'C'), 
(4,   '2017-07-06',   59,  400,  'D'); 

WITH CTE AS(
    SELECT ID, DATE, CODE /* I don't know how your query looks like*/ 
    FROM @T 
    WHERE ID IN (1,2) 
    ) 
    SELECT * 
    FROM @T 
    WHERE ID IN (SELECT ID FROM CTE); 

结果:

+----+---------------------+------+-------+------+ 
| ID |  Date   | Code | Amt | Type | 
+----+---------------------+------+-------+------+ 
| 1 | 06.01.2017 00:00:00 | 56 | 100,0 | A | 
| 2 | 06.03.2017 00:00:00 | 57 | 200,0 | B | 
+----+---------------------+------+-------+------+ 

或使用子查询与INNER JOIN像:

DECLARE @T TABLE (ID INT,  Date DATE,  Code INT, Amt DECIMAL(4,1), Type CHAR(1)); 
INSERT INTO @T VALUES 
(1,   '2017-01-06',   56,  100,  'A'), 
(2,   '2017-03-06',   57,  200,  'B'), 
(3,   '2017-05-06',   58,  300,  'C'), 
(4,   '2017-07-06',   59,  400,  'D'); 


    SELECT TT.* 
    FROM @T TT INNER JOIN 
    (SELECT ID, DATE, CODE /* I don't know how your query looks like*/ 
    FROM @T 
    WHERE ID IN (1,2)) T ON TT.ID = T.ID; 

结果:

+----+---------------------+------+-------+------+ 
| ID |  Date   | Code | Amt | Type | 
+----+---------------------+------+-------+------+ 
| 1 | 06.01.2017 00:00:00 | 56 | 100,0 | A | 
| 2 | 06.03.2017 00:00:00 | 57 | 200,0 | B | 
+----+---------------------+------+-------+------+ 
相关问题