복붙노트

[SQL] 다른 테이블의 데이터를 사용하여 계산 된 열 만들기

SQL

다른 테이블의 데이터를 사용하여 계산 된 열 만들기

나는 SQL 서버 2008 R2 데이터베이스를 가지고있다. 이 데이터베이스는 사진 및 PictureUse라는 두 개의 테이블이 있습니다.

사진 테이블에는 다음과 같은 열이 있습니다 :

Id (int)   
PictureName (nvarchar(max)) 
CreateDate (datetime )  

PictureUse 테이블에는 다음과 같은 열이 있습니다 :

Id (int) 
Pictureid (int) 
CreateDate (datetime )  

나는이 그림 clicked.any 도움이 된 횟수 그 날을 알려주는 사진 테이블에서 계산 열을 만들 필요가?

해결법

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

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

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

    CREATE FUNCTION dbo.CountUses(@pictureId INT)
    RETURNS INT
    AS
      BEGIN
          RETURN
            (SELECT Count(id)
             FROM   PictureUse
             WHERE  PictureId = @PictureId)
      END 
    

    계산 열은 다음과 같이 추가 될 수있다 :

    ALTER TABLE dbo.Picture
    ADD NofUses AS dbo.CountUses(Id)
    

    그러나, 나는 오히려 이것에 대한보기를 만들 것입니다 :

    CREATE VIEW PictureView
    AS
      SELECT Picture.Id,
             PictureName,
             Picture.CreateDate,
             Count(PictureUse.Id) NofUses
      FROM   Picture
             JOIN PictureUse
               ON Picture.Id = PictureUse.PictureId
      GROUP  BY Picture.Id,
                PictureName,
                Picture.CreateDate 
    
  2. ==============================

    2.계산 된 열은 같은 테이블의 다른 항목을 참조 할 수있다. 당신은 (jeroenh의 대답에 따라) UDF를 사용할 수 있지만 열 저장 또는 색인하고는 행에 액세스 할 때마다 다시 계산해야하므로되지 않습니다.

    계산 된 열은 같은 테이블의 다른 항목을 참조 할 수있다. 당신은 (jeroenh의 대답에 따라) UDF를 사용할 수 있지만 열 저장 또는 색인하고는 행에 액세스 할 때마다 다시 계산해야하므로되지 않습니다.

    당신은 (그것을 PictureUse에서 행의 바로 계산, 난 의심 같은 경우)이 정보가 포함 된 인덱싱 된 뷰를 만들 수 있습니다 :

    CREATE VIEW dbo.PictureStats
    WITH SCHEMABINDING
    AS
        SELECT PictureID,COUNT_BIG(*) as Cnt from dbo.PictureUse
    GO
    CREATE UNIQUE CLUSTERED INDEX IC_PictureStats on dbo.PictureStats (PictureID)
    

    내부적으로 SQL Server는 효율적으로이 뷰의 결과를 포함하는 테이블을 만들 것이며, PictureUse에 대한 모든 삽입, 업데이트 또는 삭제 당신을 위해 자동으로이 결과 테이블을 유지합니다.

  3. ==============================

    3.당신은 업데이트 후 원래의 테이블 데이터가 변경되었다 경우, 다음 데이터가 일치하지 않을, 당신은 항상 열 수를 얻기 위해이 SELECT 문을 사용할 수 있기 때문에, 테이블에 계산 된 열을 추가 할 필요가, 또는보기로 만들 해달라고

    당신은 업데이트 후 원래의 테이블 데이터가 변경되었다 경우, 다음 데이터가 일치하지 않을, 당신은 항상 열 수를 얻기 위해이 SELECT 문을 사용할 수 있기 때문에, 테이블에 계산 된 열을 추가 할 필요가, 또는보기로 만들 해달라고

    select p.id,count(*) as count 
    from Picture P
    join PictureUse  U
    on p.id=u.Pictureid 
    group by p.id
    
  4. ==============================

    4.이 작동합니다

    이 작동합니다

    SELECT  P.id
            ,P.PictureName 
            ,COUNT(P.id) as [Count] 
            FROM Picture P
            INNER JOIN PictureUse PU 
            ON P.id=PU.Pictureid 
            GROUP BY P.id,P.PictureName 
    
  5. ==============================

    5.이 시도

    이 시도

    select count(distict pictureid) from pictureuse 
     inner join picture on picture.id=pictureuse.pictureid
    
  6. from https://stackoverflow.com/questions/13488822/create-computed-column-using-data-from-another-table by cc-by-sa and MIT license