2016-11-22 1 views
-1

이 내 테이블 내 데이터베이스에보고하는 방법이다 : 나는 2 개 테이블이 을 :- MSSQL

1. Location = ID, Name 
2. Product = ProdID, LocationID, CreatedDate 

------------------------------------------------- 
| ID   | Location  | CreatedDate  
------------------------------------------------- 
| 1234   | Location 1 | 2016-11-17 12:39 
| 4567   | Location 1 | 2016-11-17 12:39 
| 8978   | Location 1 | 2016-11-17 12:39  
| 8978   | Location 2 | 2016-11-17 13:39 
| 2578   | Location 1 | 2016-11-17 12:39 
| 1234   | Location 2 | 2016-11-18 12:39 
------------------------------------------------- 

을 나는 다음과 같은 테이블을 검색 할 :

---------------------------------------------- 
| Location 1 | Location 2 | Location 3 | 
---------------------------------------------- 
| 1234   | 1234   |    | 
| 4567   |    |    | 
| 8978   | 8978   | 8978   | 
| 2578   | 2578   | 2578   | 
---------------------------------------------- 
또한

내가 쿼리 총량 각 위치의 마지막 스캔 고유 항목 얻으려면 위의 표에 추가 :

Location 1 count = 1 
Location 2 count = 1 
Location 3 count = 2 

설명 : 위의 표는 우리 창고에있는 다른 품목의 목록을 보여줍니다. 기본적으로 항목 1234가 위치 1에서 12:00에 스캔 된 후 위치 13에서 13:00에 스캔 된 경우 쿼리는 날짜를 기준으로 한 마지막 업데이트이므로 위치 2에서 데이터를 가져와야합니다.

+1

샘플 데이터를 입력하십시오. 예상 결과를 제공했습니다. 그러나 샘플 데이터가 누락되었습니다. – Viki888

+0

'SELECT '1234'\ '위치 1 \', '1234'\ '위치 2 \', ''\ '위치 3 \'UNION ... ' – Strawberry

+0

예제 데이터가 없으면 이런 질문에 대답하기가 정말 어려울 수 있습니다 . 이 [질문] (http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056)을 살펴보면 좋은 SQL 질문을 게시하는 방법. 또한 [도움말 페이지] (http://stackoverflow.com/help/mcve)에서이 설명서를 읽을 가치가 있습니다. 이 페이지에 대한 조언을 따르면 올바른 대답을 얻을 수있는 가능성이 높아집니다. –

답변

0

분명히 ID = LocationID에 내부 결합을 시도 할 것입니다.

그 외에도 이것은 'where'절에 대한 것입니다. 내가 상상 한 각 항목의 최대 (날짜)를 가져 오는 하위 쿼리가 필요합니다. 누락 된 부분입니다.

+0

예 현재 테이블이 어떻게 표시되는지에 대한 질문을 업데이트했습니다. – MishMish

1

당신은 아래에 시도 할 수는

다음
select 
    case when Location1 = 0 then null else Location1 end Location1, 
    case when Location2 = 0 then null else Location2 end Location2, 
    case when Location3 = 0 then null else Location3 end Location3 
from(
    SELECT 
     SUM(case when location_id = 'Location 1' then id else 0 end) Location1, 
     SUM(case when location_id = 'Location 2' then id else 0 end) Location2, 
     SUM(case when location_id = 'Location 3' then id else 0 end) Location3 
    from Product 
    group by ProdID) t1; 

이 requirement2를 들어

enter image description here

위의 쿼리의 결과입니다 requirement1를 들어

를 조회

select 
    sum(case when Location2 = 0 then 1 else 0 end) Location1, 
    sum(case when Location3 = 0 and Location2 <> 0 then 1 else 0 end) Location2, 
    sum(case when Location3 = 0 then 0 else 1 end) Location3 
from(
    SELECT 
     SUM(case when location_id = 'Location 1' then id else 0 end) Location1, 
     SUM(case when location_id = 'Location 2' then id else 0 end) Location2, 
     SUM(case when location_id = 'Location 3' then id else 0 end) Location3 
    from Product 
    group by id) t1; 
,691,363 (210)

다음은 쿼리

enter image description here

주에 대한 결과입니다 ProdID는 정수 경우, 위의 쿼리에만 작동합니다.

희망이 도움이 될 것입니다.

+0

안녕 Viki 쿼리가 정말 잘 작동하지만 정적 인 것처럼 보입니다. 마지막에 최대 17 개의 위치를 ​​추가 할 계획입니다. 역동적 인 접근 방식을 사용하면 더 쉽게 만들 수 있습니까? – MishMish