2016-12-07 7 views
0

예 : 나는 table1과 table3 아래있다. table2의 'Counts'필드는 table1과 table3의 valuess 필드를 기반으로 업데이트해야합니다. 즉 23은 table1에 4 번 나타나고 table3과 45는 한 번 나타납니다. 표 2는 해당 개수로 업데이트해야합니다.첫 번째 2 개 테이블의 데이터를 사용하여 세 번째 테이블을 업데이트하는 SP

Id | Data | Valuess 
1 | rfsd | 23 
2 | fghf | 45 
3 | rhhh | 23 

표 3

Id | Data | Valuess 
1 | rfsd | 23 
2 | tfgy | 23 

표 2

Id | Fields | Counts 
1 | 23  | 4 
2 | 45  | 1 

내가 이것을 달성하기 위해 아래의 저장 프로 시저를 사용하고 있습니다.

WITH t13 AS (
SELECT Id, Data, Valuess FROM Table1 UNION ALL SELECT Id, Data, Valuess FROM Table3), 
cte AS (SELECT Valuess,COUNT(*) AS Count2 FROM t13 GROUP BY Valuess) 

UPDATE t2 
SET t2.Counts = cte.Count2 
FROM Table2 t2 JOIN cte ON t2.Fields = cte.Valuess; 

질문

지금 대신 상기 테이블 데이터 난 테이블 데이터 이하가

....

Id | Data | Valuess 
1 | rfsd | 004561 
2 | fghf | 0045614 
3 | rhhh | adcwyx 

표 3

Id | Data | Valuess 
1 | rfsd | 0045614 
2 | tfgy | 004561 

표 2

Id | Fields | Counts 
1 | 0045614 | 4 
2 | adcwyxv | 1 

여기에서는 table1 및 table3의 valuess 필드에 영숫자 데이터가 있습니다. 또한 '004561'및 '0045614'와 같은 데이터가 있습니다

필드의 7 번째 요소를 잘라 내고 테이블 3의 7 번째 요소를 클리핑하여 비교하고 싶습니다. 즉 00451661, 004561 및 adcwyx가 사용됩니다. 1 번 테이블. 004561 및 004561은 table3에서 가져와 테이블 2의 004561 및 adcwyx와 비교됩니다 (먼저 table2의 7 번째 요소를 잘라 내야합니다).

최종 결과는 표 2와 같아야합니다.

+0

SQL-Server! = MySQL. – Barmar

+0

table1의 값인'adcwyx'는 어떻게 table2에서'adcwyxv'가됩니까? – SqlZim

+0

sqlzim- 2 개의 다른 데이터 값이며 서로 종속되지 않습니다. –

답변

1

SUBSTRING해야합니다.

WITH t13 AS (
    SELECT Id, Data, SUBSTRING(Valuess,1,6) AS [Values] 
    FROM Table1 
    UNION ALL 
    SELECT Id, Data, SUBSTRING(Valuess,1,6) AS [Values] 
    FROM Table3 
) 
, cte AS (
    SELECT [Values],COUNT(*) AS Count2 
    FROM t13 GROUP BY [Values] 
) 
UPDATE t2 
SET t2.Counts = cte.Count2 
FROM Table2 t2 JOIN cte ON SUBSTRING(t2.Fields,1,6) = cte.[Values];