2010-11-25 2 views
4

이것은 쿼리와 관련이 없으며 다른 필드의 합계로 표시되는 열의 필드를 가질 수 있는지 알고 싶습니다. 엑셀처럼 약간.다른 필드의 합계로 SQL 필드

조리법

nrecepie integer 
name varchar(255) 
time integer 

다른

지침

그래서
nintrucion integer 
nrecepie integer 
time integer 

, 조리법이있다 기본적으로 n 개의 지침 I :

예를 들어

, 나는 두 개의 테이블이 그러고 싶습니다

recipes.time = sum(intructions.time) 

테이블 스크립트 생성시이 작업을 수행 할 수 있습니까 ?? 그렇다면 어떻게?

+0

'CREATE TABLE' 문의 일환으로 그런 일은 불가능하다고 생각합니다. 트리거는 이러한 종류의 기능에 사용되거나 업데이트를 수행하기 위해 저장 프로 시저를 작성할 수 있습니다 (지침이 추가/제거 된 경우). – shahkalpesh

+0

우리는 어떤 환경에 대해 이야기하고 있습니까? SQL Server? 접속하다? MySQL은? – wcm

답변

2

이 작업은 INSERT/UPDATE/DELETE 트리거를 사용하여 수행 할 수 있습니다. 테이블 Instructions에서 데이터가 변경 될 때마다 트리거가 실행되어 value의 시간을 Recepies으로 업데이트합니다.

+0

감사합니다. 그들이 존재한다는 것을 몰랐습니다. 그 (것)들 google 그들 및 배우십시오 :) – Martin

0

지침 테이블이 변경 될 때마다 트리거를 사용하여 시간 열을 업데이트 할 수 있지만 명령 간의 조인에 대한 그룹 기준 절을 통해 시간 열을 계산하는 것이 "일반"(덜 중복) 방식입니다 및 수신 [테이블] 테이블. 당신이 정말로 실제 테이블에 데이터를 원한다면 당신은 트리거를 사용합니다

CREATE VIEW recipes_with_time AS 
SELECT nrecepie, name, SUM(Instructions.time) AS total_time 
FROM Recepies 
JOIN Instructions USING (nrecepie) 
GROUP BY Recepies.nrecepie 

:

4

당신은보기를 사용할 수 있습니다.

+0

정직하게 @Martin, 당신이 가치가 항상 최신 일 것이라는 점을 알고 있기 때문에 이것은 당신의 제일 경로이다. – wcm

+0

입력 해 주셔서 감사합니다.하지만 실제로보기없이 처리해야합니다. 이 경우 트리거와 함께 가야합니다 – Martin

0

데이터베이스 공급 업체에 따라 다름 ... SQL Server에서 예를 들어의 다른 열 의 값을 기반으로 값을 계산하는 열을 만들 수 있습니다. 그들은 계산 된 열라고, 당신은 이런 식으로 작업을 수행합니다 일반적으로

Create Table MyTable 
(
    colA Integer, 
    colB Integer, 
    colC Intgeer, 
    SumABC As colA + colB + colC 
) 

은 값을 ghenerate하고 공식이나 방정식 '으로'단어를 원하는 열 이름을 넣어. 이 접근법은 임의의 스토리지를 사용하지 않고 누군가가 선택 에이전트를 실행할 때마다 thevalue를 계산하므로 테이블 프로파일이 더 좁아지고 성능이 향상됩니다. 유일한 단점은 계산 된 열에 인덱스를 넣을 수 없다는 것입니다. (SQL 서버에는 생성 또는 업데이트 될 때마다 값을 유지해야한다는 데이터베이스를 지정할 수있는 플래그가 있지만 ... 인덱싱 할 수있는 경우)

그러나이 예에서, 다른 테이블의 여러 행에서 데이터에 액세스하고 있습니다. 이렇게하려면 다른 응답자가 제안한 방아쇠가 필요합니다.

+0

이 경우 OP는 별도의 테이블에있는 여러 관련 레코드의 수직 합계를 원합니다 (주문량/주문 총계 상황에서와 같이) –

+0

계산 된 열은 다른 행이나 테이블의 데이터에 액세스 할 수 없습니다. – RedFilter

+0

감사합니다. 예제의 세부 정보를 읽지 않고 질문에 답변했습니다. –

0

일반적으로 파생 정보를 저장하기 때문에 상황을 피하기를 원합니다 (성능상의 이유로 예외가 있음). 따라서 가장 좋은 해결책은 AndreKR이 제안한대로보기를 만드는 것입니다. 이렇게하면 실제로 저장된 열에있는 것처럼 데이터베이스에서 SELECT하기 쉽도록 항상 정확한 총계가 제공됩니다.

관련 문제