2014-06-09 2 views
0

방금 ​​SAP 용으로 mysql을 사용하기 시작했습니다.한 줄의 가격을 모든 줄의 가격으로 만드십시오

나는이 결과를 얻으려면 싶습니다

create view table_a 
as 
select DocEntry, Description, Price 
from inv1 where Description like 'freight' 

create view table_b 
as 
select DocEntry, Description, Price 
from inv1 
where exist (select * from table_a where table_a.DocEntry = table_b.DocEntry 

내가 돈 ':이 통해화물로 항목을 필터링하려

DocEntry Description Quantity Price 
00001  item A  2  300.00 
00001  freight  -  100.00 
00002  item A  1  300.00 
00003  item C  1  300.00 
00003  freight  -  110.00 

이 데이터에서

DocEntry Description Price 
00001 item A  100.00 
00003 item C  110.00 

을 가격과 어떻게 관련이 있는지 알고 있습니까?

감사합니다. 데이터가 필요하지 않습니다 만, distinct 키워드가 각 "화물"여러 "항목"행이 경우에 추가되었습니다

select distinct a.DocEntry, a.Description, b.Price 
from inv1 a 
join inv1 b on a.DocEntry = b.DocEntry 
where a.Description != 'freight' 
and b.Description = 'freight' 

: 당신이화물은 각 항목에 맞게 원하는처럼

+0

이 ** "한 줄에 모든 라인의 가격의 가격을"* *? – Linger

+0

'DocEntry, 설명, 가격을 선택하십시오. FROM inv1 WHERE Description = 'freight '' 원하는 것을 얻으시겠습니까? – Linger

+0

DocEntries에 2 개 이상의 레코드가 있습니까? 그렇다면 우리는 그 기술에 대해 어떤 설명을 할 수 있습니까? – xQbert

답변

1

같습니다 열. 그럴 가능성이 없다면 distinct이 삭제 될 수 있습니다.

+0

제공되는 설명은 각 docEntry에 대해 2로 제한됩니다. 그렇지 않으면! = '화물'만으로는 충분하지 않습니다. (그리고 두 번째'화물 '이 끝에 추가된다고 가정하면) – xQbert

+0

@xQbert OK, distinct 추가. – Bohemian

+0

나는 명확하지 않다. 유일한 문법 문제는 맨 끝에 '빠져있다. 다른 문제는 사용자가 docEntry 당 설명을 위해 나열된 항목이 2 개 이상인 경우입니다. (예를 들어 나열되지 않은 경우) 작동하지 않습니다. 그렇지 않으면 그 벌금. 별개의 기능이 작동하지 않는 이유의 예가 여기 있습니다. http://sqlfiddle.com/#!2/b1c75/1/0. 그러나 그러한 경우 OP는 더 많은 데이터를 제공해야합니다. 이것은 '끝에'가 빠진 +1 답변과 OP에 대한 논리에 대한 질문입니다. – xQbert

0

이 아니에요 당신이 요구하는지 아주 분명하지만 어쩌면 당신은에 의해 무슨 소리 같은 것을 ...

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(DocEntry INT NOT NULL, Description VARCHAR(12) NOT NULL, Quantity INT NULL,Price INT NOT NULL,PRIMARY KEY(DocEntry,Description)); 

INSERT INTO my_table VALUES 
(1,'item A',2,300), 
(1,'freight',NULL,100), 
(2,'item A',1,300), 
(3,'item C',1,300), 
(3,'freight',NULL,110); 

mysql> SELECT * FROM my_table; 
+----------+-------------+----------+-------+ 
| DocEntry | Description | Quantity | Price | 
+----------+-------------+----------+-------+ 
|  1 | freight  |  NULL | 100 | 
|  1 | item A  |  2 | 300 | 
|  2 | item A  |  1 | 300 | 
|  3 | freight  |  NULL | 110 | 
|  3 | item C  |  1 | 300 | 
+----------+-------------+----------+-------+ 

SELECT docentry 
    , MAX(CASE WHEN description = 'freight' THEN price END) price 
    , MAX(CASE WHEN quantity IS NOT NULL THEN description END) description 
    FROM my_table 
GROUP 
    BY docentry 
HAVING price IS NOT NULL; 
+----------+-------+-------------+ 
| docentry | price | description | 
+----------+-------+-------------+ 
|  1 | 100 | item A  | 
|  3 | 110 | item C  | 
+----------+-------+-------------+ 
관련 문제