복붙노트

[SQL] 다른 테이블 칼럼에 기초하여 계산 열의 수식

SQL

다른 테이블 칼럼에 기초하여 계산 열의 수식

이 테이블을 고려해 c_const

 code  |  nvalue
 --------------
 1     |  10000
 2     |  20000  

다른 테이블 t_anytable

 rec_id |  s_id  | n_code
 ---------------------
 2      |  x     | 1

목표는 다음 공식에 기초하여 계산 된 열 될 S_ID 가지고있다 :

 rec_id*(select nvalue from c_const where code=ncode)

이 오류가 발생합니다 :

어떻게 입력으로 다른 테이블의 컬럼을 사용하여이 계산 된 열의 값을 계산 할 수 있습니까?

해결법

  1. ==============================

    1.당신은이에 대한 사용자 정의 함수를 만들 수 있습니다 :

    당신은이에 대한 사용자 정의 함수를 만들 수 있습니다 :

    CREATE FUNCTION dbo.GetValue(@ncode INT, @recid INT)
    RETURNS INT
    AS 
       SELECT @recid * nvalue 
       FROM c_const 
       WHERE code = @ncode
    

    다음 계산 열을 정의하는 것을 사용합니다

    ALTER TABLE dbo.YourTable
       ADD NewColumnName AS dbo.GetValue(ncodeValue, recIdValue)
    
  2. ==============================

    2.이것은 (당신이 계산 된 열에서 빠른 조회를해야하는 경우, 인덱싱 된 뷰를) 더보기위한 작업이 될 것 같다 :

    이것은 (당신이 계산 된 열에서 빠른 조회를해야하는 경우, 인덱싱 된 뷰를) 더보기위한 작업이 될 것 같다 :

    CREATE VIEW AnyView
    WITH SCHEMABINDING
    AS
    
    SELECT a.rec_id, a.s_id, a.n_code, a.rec_id * c.nvalue AS foo
    FROM AnyTable a
    INNER JOIN C_Const c
        ON c.code = a.n_code
    

    이 조인에 대해 여러 결과가있는 경우 대신 오류가 생산의 여러 레코드를 반환에있는 하위 쿼리 버전에서 미묘한 차이가 있습니다. 그러나 쉽게 c_const.code에 UNIQUE 제약 조건으로 해결되는 (나는 이미 PRIMARY KEY 용의자).

    누군가가 하위 쿼리 버전보다 이해하는 것도 훨씬 쉬워졌습니다.

    marc_s 표시된 것처럼 당신은 하위 쿼리 및 UDF와 함께 할 수 있지만, 그 가능성 스칼라 UDF는 행 단위를 계산해야하기 때문에, 가입 간단한에 비해 매우 비효율적 일 수 있습니다.

  3. from https://stackoverflow.com/questions/2769007/formula-for-computed-column-based-on-different-tables-column by cc-by-sa and MIT license