[SQL] 다른 테이블의 데이터를 사용하여 계산 된 열 만들기
SQL다른 테이블의 데이터를 사용하여 계산 된 열 만들기
나는 SQL 서버 2008 R2 데이터베이스를 가지고있다. 이 데이터베이스는 사진 및 PictureUse라는 두 개의 테이블이 있습니다.
사진 테이블에는 다음과 같은 열이 있습니다 :
Id (int)
PictureName (nvarchar(max))
CreateDate (datetime )
PictureUse 테이블에는 다음과 같은 열이 있습니다 :
Id (int)
Pictureid (int)
CreateDate (datetime )
나는이 그림 clicked.any 도움이 된 횟수 그 날을 알려주는 사진 테이블에서 계산 열을 만들 필요가?
해결법
-
==============================
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.계산 된 열은 같은 테이블의 다른 항목을 참조 할 수있다. 당신은 (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.당신은 업데이트 후 원래의 테이블 데이터가 변경되었다 경우, 다음 데이터가 일치하지 않을, 당신은 항상 열 수를 얻기 위해이 SELECT 문을 사용할 수 있기 때문에, 테이블에 계산 된 열을 추가 할 필요가, 또는보기로 만들 해달라고
당신은 업데이트 후 원래의 테이블 데이터가 변경되었다 경우, 다음 데이터가 일치하지 않을, 당신은 항상 열 수를 얻기 위해이 SELECT 문을 사용할 수 있기 때문에, 테이블에 계산 된 열을 추가 할 필요가, 또는보기로 만들 해달라고
select p.id,count(*) as count from Picture P join PictureUse U on p.id=u.Pictureid group by p.id
-
==============================
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.이 시도
이 시도
select count(distict pictureid) from pictureuse inner join picture on picture.id=pictureuse.pictureid
from https://stackoverflow.com/questions/13488822/create-computed-column-using-data-from-another-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] ALTER 테이블 - MySQL의에서 AUTO_INCREMENT를 추가 (0) | 2020.05.26 |
---|---|
[SQL] 오라클 / SQL : - 리턴 제로 행 왜 쿼리 "WHERE ROWNUM> = 5 AND ROWNUM <= 10 기록 SELECT * FROM"않습니다 (0) | 2020.05.26 |
[SQL] MySQL의 오류를주고있다 왜 "함수에서 결과 집합을 반환 할 수 없습니다"? (0) | 2020.05.26 |
[SQL] SSRS 2008 보고서의 제로 / 널 해결 방법으로 나누기 (0) | 2020.05.26 |
[SQL] 어떻게 SQLite는 쉼표로 구분 된 값을 분할하려면? (0) | 2020.05.26 |