Reputation:
I am trying to display the difference between water measurements for each cardinal direction (N, E, S, W) for different vegetables. I think I am on the right track but not sure.
Here are the create table statements
CREATE TABLE Location
(
LocationID int IDENTITY(0, 1) NOT NULL
, LocationExposure varchar(50) NOT NULL
, LocationSunlightPercentage numeric(3,2) NOT NULL
, LocationMoistureLevel numeric(3, 2) NOT NULL
, CONSTRAINT PK_Location PRIMARY KEY (LocationID)
)
CREATE TABLE Crop
(
CropID int IDENTITY(0, 1) NOT NULL
, CropName varchar(50)
, CropOptimalSunlightPercentage numeric(3,2) NOT NULL
, CropOptimalMoistureLevel numeric(3,2) NOT NULL
, CropExpectedHarvestWeight numeric(3,2) NOT NULL
, CONSTRAINT PK_Crop PRIMARY KEY (CropID)
)
CREATE TABLE Sowing
(
CropID int NOT NULL
, TechnicianID int NOT NULL
, LocationID int NOT NULL
, SowingDate date NOT NULL
, SowingSeedCount int NOT NULL
, CONSTRAINT PK_Sowing PRIMARY KEY (CropID, TechnicianID, LocationID)
, CONSTRAINT FK_SowingCrop FOREIGN KEY (CropID) REFERENCES Crop(CropID) ON DELETE CASCADE
, CONSTRAINT FK_SowingTechnician FOREIGN KEY (TechnicianID) REFERENCES Technician(TechnicianID) ON DELETE CASCADE
, CONSTRAINT FK_SowingLocation FOREIGN KEY (LocationID) REFERENCES Location(LocationID) ON DELETE CASCADE
)
Here are the dummy data
INSERT INTO Location VALUES ('East', 0.28, 0.80)
INSERT INTO Location VALUES ('North', 0.17, 0.84)
INSERT INTO Location VALUES ('West', 0.38, 0.48)
INSERT INTO Location VALUES ('South', 0.45, 0.66)
INSERT INTO Crop VALUES ('Carrot', 0.26, 0.82, 0.08)
INSERT INTO Crop VALUES ('Beet', 0.44, 0.80, 0.04)
INSERT INTO Crop VALUES ('Corn', 0.44, 0.76, 0.26)
INSERT INTO Crop VALUES ('Tomato', 0.42, 0.80, 0.16)
INSERT INTO Crop VALUES ('Radish', 0.28, 0.84, 0.02)
INSERT INTO Sowing VALUES (0, 0, 0, '20050418', 28)
INSERT INTO Sowing VALUES (0, 1, 1, '20050414', 14)
INSERT INTO Sowing VALUES (1, 0, 2, '20050418', 36)
INSERT INTO Sowing VALUES (2, 1, 3, '20050414', 20)
INSERT INTO Sowing VALUES (2, 2, 2, '20050419', 12)
INSERT INTO Sowing VALUES (3, 3, 3, '20050425', 38)
INSERT INTO Sowing VALUES (4, 2, 0, '20050430', 30)
And query thus far
SELECT CropName AS [Crop], LocationExposure AS [Location], CropOptimalMoistureLevel AS [Water Needed],
LocationMoistureLevel AS [Water Available],
CropOptimalMoistureLevel - LocationMoistureLevel AS [Difference]
FROM Sowing S JOIN
Location L
ON L.LocationID = S.LocationID JOIN
Crop C
ON C.CropID = S.CropID
Upvotes: 1
Views: 51
Reputation: 1270351
You don't need the Sowing
table. You just want a CROSS JOIN
:
SELECT c.CropName AS [Crop], l.LocationExposure AS [Location],
c.CropOptimalMoistureLevel AS [Water Needed],
l.LocationMoistureLevel AS [Water Available],
(c.CropOptimalMoistureLevel - l.LocationMoistureLevel) AS [Difference]
FROM Location L CROSS JOIN
Crop C
ORDER BY C.CropID, l.LocationExposure;
Upvotes: 2