Hôm nay, lần đầu tiên trong 10 năm phát triển với máy chủ sql, tôi đã sử dụng phép nối chéo trong truy vấn sản xuất. Tôi cần phải đệm một tập hợp kết quả vào một báo cáo và thấy rằng một kết hợp chéo giữa hai bảng với một quảng cáo trong đó mệnh đề là một giải pháp tốt. Tôi đã tự hỏi những gì sử dụng có bất cứ ai tìm thấy trong mã sản xuất cho việc tham gia chéo?sql cross join - sử dụng bất kỳ ai đã tìm thấy nó?
Cập nhật: mã được đăng bởi Tony Andrews rất gần với những gì tôi đã sử dụng tham gia chéo. Tin tôi đi, tôi hiểu những tác động của việc sử dụng một sự gia nhập chéo và sẽ không làm nhẹ đến thế. Tôi đã vui mừng khi cuối cùng đã sử dụng nó (tôi là một mọt sách) - giống như lần đầu tiên tôi sử dụng một sự tham gia đầy đủ bên ngoài.
Cảm ơn mọi người đã trả lời! Dưới đây là cách tôi sử dụng tham gia chéo:
SELECT CLASS, [Trans-Date] as Trans_Date,
SUM(CASE TRANS
WHEN 'SCR' THEN [Std-Labor-Value]
WHEN 'S+' THEN [Std-Labor-Value]
WHEN 'S-' THEN [Std-Labor-Value]
WHEN 'SAL' THEN [Std-Labor-Value]
WHEN 'OUT' THEN [Std-Labor-Value]
ELSE 0
END) AS [LABOR SCRAP],
SUM(CASE TRANS
WHEN 'SCR' THEN [Std-Material-Value]
WHEN 'S+' THEN [Std-Material-Value]
WHEN 'S-' THEN [Std-Material-Value]
WHEN 'SAL' THEN [Std-Material-Value]
ELSE 0
END) AS [MATERIAL SCRAP],
SUM(CASE TRANS WHEN 'RWK' THEN [Act-Labor-Value] ELSE 0 END) AS [LABOR REWORK],
SUM(CASE TRANS
WHEN 'PRD' THEN [Act-Labor-Value]
WHEN 'TRN' THEN [Act-Labor-Value]
WHEN 'RWK' THEN [Act-Labor-Value]
ELSE 0
END) AS [ACTUAL LABOR],
SUM(CASE TRANS
WHEN 'PRD' THEN [Std-Labor-Value]
WHEN 'TRN' THEN [Std-Labor-Value]
ELSE 0
END) AS [STANDARD LABOR],
SUM(CASE TRANS
WHEN 'PRD' THEN [Act-Labor-Value] - [Std-Labor-Value]
WHEN 'TRN' THEN [Act-Labor-Value] - [Std-Labor-Value]
--WHEN 'RWK' THEN [Act-Labor-Value]
ELSE 0 END) -- - SUM([Std-Labor-Value]) -- - SUM(CASE TRANS WHEN 'RWK' THEN [Act-Labor-Value] ELSE 0 END)
AS [LABOR VARIANCE]
FROM v_Labor_Dist_Detail
where [Trans-Date] between @startdate and @enddate
--and CLASS = (CASE @class WHEN '~ALL' THEN CLASS ELSE @class END)
GROUP BY [Trans-Date], CLASS
UNION --REL 2/6/09 Pad result set with any missing dates for each class.
select distinct [Description] as class, cast([Date] as datetime) as [Trans-Date], 0,0,0,0,0,0
FROM Calendar_To_Fiscal cross join PRMS.Product_Class
where cast([Date] as datetime) between @startdate and @enddate and
not exists (select class FROM v_Labor_Dist_Detail vl where [Trans-Date] between @startdate and @enddate
and vl.[Trans-Date] = cast(Calendar_To_Fiscal.[Date] as datetime)
and vl.class= PRMS.Product_Class.[Description]
GROUP BY [Trans-Date], CLASS)
order by [Trans-Date], CLASS
trong trường hợp này không phải là dữ liệu của bạn thậm chí không ở dạng bình thường đầu tiên? Tất cả 24 giờ trong ngày được lưu trữ trong một trường. Đó không phải là vấn đề thực sự sao? – kralco626
@ kralco626 - Chỉ vì bình thường hóa có lợi cho cơ sở dữ liệu quan hệ, điều đó không có nghĩa là dữ liệu nguồn của bạn được cấu trúc theo cách đó. SAS, ví dụ, thường sẽ mang lại các bộ dữ liệu đảm bảo xoay vòng theo cách này, hoặc các bộ điều khiển vi mô cung cấp các chuỗi theo dõi trạng thái, vv .. Điều này có thể tạo thành một phần của ETL của bạn. – MatBailie