2015-07-21 42 views
-2

原始表:Cocatenate列唯一

======================================================================================= 
| A |  B |  C  |  D  |  E  |  F  |  G  | 
======================================================================================= 
| 65432 | AFD452E | sometext1 | IA1  | 10,6 | 8,5  | 22,0 | 
| 65432 | AFD452E | sometext1 | IA2  |   | 11,4  | 16,5 | 
| 65432 | AFD452E | sometext1 | IA3  |   | 3,5  | 5,3 | 
| 65989 | 74652E | sometext2 | IA1  | 3,3  |    |  8  | 
| 65989 | 74652E | sometext2 | IA3  | 23  |  1,1  | 6,9 | 
| 27890 | P8965A | sometext3 | IA3  | 12,7 |  13,8 | 33,2 | 
======================================================================================= 

结果表应该是:

======================================================================================= 
| A |  B |  C  |  NEWA1  |  NEWA2  |  NEWA3  | 
======================================================================================= 
| 65432 | AFD452E | sometext1 | 10,6-8,5-22,0-| -11,4-16,5- |     | 
| 65989 | 74652E | sometext2 | 3,3--8-  |    | 23-1,1-6,9- | 
| 27890 | P8965A | sometext3 |    |    | 12,7-13,8-33,2- | 
======================================================================================= 

这就是我想出了这么远,但它确实没有做的工作:

SELECT DISTINCT [A], [B], [C], 
    IIF([D] LIKE "IA1", IIF(ISNULL([E]), '-', [E] + '-') + IIF(ISNULL([F]), '-', [F] + '-') + IIF(ISNULL([G]), '-', [G] + '-') , ‘’) AS NEWIA1, 
    IIF([D] LIKE "IA2", IIF(ISNULL([E]), '-', [E] + '-') + IIF(ISNULL([F]), '-', [F] + '-') + IIF(ISNULL([G]), '-', [G] + '-') , ‘’) AS NEWIA2, 
    IIF([D] LIKE "IA3", IIF(ISNULL([E]), '-', [E] + '-') + IIF(ISNULL([F]), '-', [F] + '-') + IIF(ISNULL([G]), '-', [G] + '-') , ‘’) AS NEWIA3 
    FROM TABLE; 

这是我想出了我的查询:

======================================================================================= 
| A |  B |  C  |  NEWA1  |  NEWA2  |  NEWA3  | 
======================================================================================= 
| 65432 | AFD452E | sometext1 | 10,6-8,5-22,0-|    |     | 
| 65432 | AFD452E | sometext1 |    | -11,4-16,5- |     | 
| 65432 | AFD452E | sometext1 |    |    | -11,4-16,5- | 
| 65989 | 74652E | sometext2 | 3,3--8-  |    |     | 
| 65989 | 74652E | sometext2 |    |    | 23-1,1-6,9- | 
| 27890 | P8965A | sometext3 |    |    | 12,7-13,8-33,2- | 
======================================================================================= 
+0

我们需要看看你做了什么。有几个选项可以帮助您获得所需的信息。 – ragerory

+0

有人知道如何实现这一点吗?谢谢。 – Zachs

+0

你在VBA中工作,而不是图形界面? –

回答

0

试着这么做:

select A, B, C, 
max(iif([D] like "1A1" .. rest of code)) as newa1, 
e ... 
from table 
group by A, B. c; 

一旦你设置了行,你可以包装它们的子查询中,并修剪多余连字符。

+0

谢谢 但它也给我带来了行从原来的表,其中列d具有比IA1和IA2和IA3像其他值之前我并没有显示进口:| 34432 | P673452 | sometext3 | IA6 | | | | | 55770 | 27799A | sometext4 | IA7 | | | | 当col D不是IA1和IA2和IA3时如何避免行? – Zachs

+0

基本上我想补充说的是,结果列NEWA1和NEWA2和NEWA3不应该全部为空:或者空或零长度为同一时间。 – Zachs

+0

我对你们所有人的祝贺都已经完全回答了这个问题。非常感谢所有人! :) SELECT A,B,C,... FROM YourTable WHERE d IN( 'IA1', 'IA2', 'IA3') GROUP BY A,B,C ; – Zachs