Tôi đang cố gắng cập nhật/chèn vào bảng dựa trên số lượng cột cụ thể. Nếu số lượng [COL1] là> 1 hoặc = DATEADD[MONTH, -3, GETDATE[]]
AND T1. [DATE1] < GETDATE[]
NHÓM THEO T1. [Bán lẻ]
] BẢNG PHÁT SINH
NẾU @CNT = 1 THÌ
CẬP NHẬT [DBO]. TABLE2
SET [Retails] = [SELECT T2. [Bán lẻ] TỪ [DBO]. [TABLE1] T1
THAM GIA [DBO]. BẢNG2 T2
TRÊN DƯỚI[T2. Sản phẩm]] = LOWER[T1. Sản phẩm]
Ở ĐÂU T1. [Bán lẻ] ' ' AND [T1. Sản phẩm] ' '
AND T1. [DATE1] >= DATEADD[MONTH, -3, GETDATE[]]
AND T1. [DATE1] < GETDATE[]
Nhưng mặc dù @CNT = 1 trong điều kiện if đang có thêm vài hàng, các hàng bổ sung, trong đó @CNT là 2, 3, 4, v.v. không đạt được mục đích và cũng kết thúc bằng lỗi cho biết đã tìm nạp nhiều cột
Tôi có thể không sử dụng biến @CNT trong điều kiện if như trên không?
sql-server-Generalsql-server-transact-sqlsql-server-reporting-services
hình ảnh. png [55. 6 KiB]
Bình luận
Hiển thị nhận xét 0
Bình luận
5. Cần 1600 ký tự còn lại ký tự
▼
- Hiển thị cho tất cả người dùng
- Hiển thị với người đăng gốc & Microsoft
- Người kiểm duyệt có thể xem
- Có thể xem bởi người kiểm duyệt và người đăng gốc
- Khả năng hiển thị nâng cao
tệp đính kèm. Có thể sử dụng tối đa 10 tệp đính kèm [bao gồm cả hình ảnh] với tối đa 3. 0 MiB mỗi cái và 30. tổng cộng 0 MiB
OlafHelper-2800 đã trả lời • Ngày 14 tháng 10 năm 20 | CharanP-5854 đã nhận xét • Ngày 14 tháng 10 năm 20
Truy vấn của bạn không bị lỗi ở điều kiện IF, nó sẽ bị lỗi sau đó trong câu lệnh CẬP NHẬT với truy vấn phụ; .
Nếu không biết thiết kế bảng, dữ liệu hiện có và logic nghiệp vụ thì rất khó để hỗ trợ tại đây.
Bình luận
Nhận xét · Hiển thị 1
Bình luận
5. Cần 1600 ký tự còn lại ký tự
▼
- Hiển thị cho tất cả người dùng
- Hiển thị với người đăng gốc & Microsoft
- Người kiểm duyệt có thể xem
- Có thể xem bởi người kiểm duyệt và người đăng gốc
- Khả năng hiển thị nâng cao
tệp đính kèm. Có thể sử dụng tối đa 10 tệp đính kèm [bao gồm cả hình ảnh] với tối đa 3. 0 MiB mỗi cái và 30. tổng cộng 0 MiB
Xin chào @OlafHelper-2800,
Ví dụ, tôi đang gặp sự cố - COSTCO có nhiều hơn 1 số lượng nhưng nó cũng đang được cập nhật trong bảng 2, nơi tôi đang cố gắng cập nhật chỉ cho một lần xuất hiện như ở trên
0 Phiếu bầu 0 ·
MelissaMa-msft đã trả lời • Ngày 14 tháng 10 năm 20 | MelissaMa-msft đã chỉnh sửa • 14 tháng 10, '20
Xin chào @CharanP-5854,
Sẽ tốt hơn nếu bạn cung cấp các câu lệnh CREATE TABLE cho các bảng của mình [TABLE1 và TABLE2] cùng với các câu lệnh INSERT với dữ liệu mẫu, đủ để minh họa mọi khía cạnh của vấn đề. Chúng ta cũng cần xem kết quả mong đợi của mẫu
Bạn sẽ làm gì nếu số đếm[COL1] > 1 hoặc = DATEADD[MONTH, -3, GETDATE[]] AND T2.[DATE1] < GETDATE[] select * from [TABLE2]
đầu ra
col1 HDR1
a aa
b bb
Trân trọng
Melissa
Nếu câu trả lời hữu ích, vui lòng nhấp vào "Chấp nhận câu trả lời" và bình chọn cho câu trả lời đó.
Lưu ý. Vui lòng làm theo các bước trong tài liệu của chúng tôi để bật thông báo qua e-mail nếu bạn muốn nhận thông báo qua email liên quan cho chủ đề này.
Bình luận
Hiển thị nhận xét 0
Bình luận
5. Cần 1600 ký tự còn lại ký tự
▼
- Hiển thị cho tất cả người dùng
- Hiển thị với người đăng gốc & Microsoft
- Người kiểm duyệt có thể xem
- Có thể xem bởi người kiểm duyệt và người đăng gốc
- Khả năng hiển thị nâng cao
tệp đính kèm. Có thể sử dụng tối đa 10 tệp đính kèm [bao gồm cả hình ảnh] với tối đa 3. 0 MiB mỗi cái và 30. tổng cộng 0 MiB
MelissaMa-msft đã trả lời • Ngày 14 tháng 10 năm 20 | MelissaMa-msft đã chỉnh sửa • 14 tháng 10, '20
Xin chào @CharanP-5854,
Bạn cũng có thể tham khảo bên dưới
DECLARE @CNT INT
SELECT @CNT = CNT FROM
[
SELECT COUNT[T2.[COL1]] CNT
FROM [DBO].[TABLE1] T2
JOIN [DBO].TABLE2 T
ON LOWER[T.[HDR1]] = LOWER[T2.COL2]
WHERE T2.[COL1] ' ' AND [T2.COL2] ' '
AND T2.[DATE1] >= DATEADD[MONTH, -3, GETDATE[]]
AND T2.[DATE1] < GETDATE[]
] DERIVEDTABLE
IF @CNT >= 1
BEGIN
UPDATE T
SET T.[COL1] = T2.[COL1]
FROM [DBO].TABLE2 T
JOIN [DBO].TABLE1 T2
ON LOWER[T.[HDR1]] = LOWER[T2.COL2]
WHERE T2.[COL1] ' ' AND [T2.COL2] ' '
AND T2.[DATE1] >= DATEADD[MONTH, -3, GETDATE[]]
AND T2.[DATE1] < GETDATE[]
END
Trân trọng
Melissa
Nếu câu trả lời hữu ích, vui lòng nhấp vào "Chấp nhận câu trả lời" và bình chọn cho câu trả lời đó.
Lưu ý. Vui lòng làm theo các bước trong tài liệu của chúng tôi để bật thông báo qua e-mail nếu bạn muốn nhận thông báo qua email liên quan cho chủ đề này.
Bình luận
Hiển thị nhận xét 0
Bình luận
5. Cần 1600 ký tự còn lại ký tự
▼
- Hiển thị cho tất cả người dùng
- Hiển thị với người đăng gốc & Microsoft
- Người kiểm duyệt có thể xem
- Có thể xem bởi người kiểm duyệt và người đăng gốc
- Khả năng hiển thị nâng cao
tệp đính kèm. Có thể sử dụng tối đa 10 tệp đính kèm [bao gồm cả hình ảnh] với tối đa 3. 0 MiB mỗi cái và 30. tổng cộng 0 MiB
Stefan Hoffmann đã trả lời • Ngày 14 tháng 10 năm 20 . Stefan Hoffmann đã chỉnh sửa • Ngày 14 tháng 10 năm 20
Vấn đề, như Olaf đã chỉ ra, là do truy vấn con của bạn trả về nhiều hơn một hàng.
NẾU không thành công, do bạn sử dụng sai giá trị COUNT[].
CẬP NHẬT yêu cầu COUNT[*] = 1.
Nhưng bạn đã sử dụng COUNT[columName], hàm trả về số lượng giá trị khác null trong cột đó có giá trị trùng lặp. btw, điều này tương đương với COUNT[ALL columnName].
DECLARE @Sample TABLE [
Payload INT
];
INSERT INTO @Sample [ Payload ]
VALUES [ NULL ] ,
[ 0 ] ,
[ 1 ] ,
[ 1 ];
SELECT COUNT[*] ,
COUNT[S.Payload] ,
COUNT[ALL S.Payload] ,
COUNT[DISTINCT S.Payload]
FROM @Sample S;
Xem thêm COUNT [Transact-SQL]
tôi sẽ kiểm tra một cái gì đó như thế này
WITH Counted
AS [ SELECT T2.[COL1] AS Dst ,
T1.[COL1] AS Src ,
COUNT[*] OVER [] AS Cnt
FROM [dbo].TABLE2 T2
INNER JOIN [dbo].TABLE1 T1 ON LOWER[T2.[HDR1]] = LOWER[T1.COL2]
WHERE T1.[COL1] ' '
AND T1.COL2 ' '
AND T1.[DATE1] >= DATEADD[MONTH, -3, GETDATE[]]
AND T1.[DATE1] < GETDATE[]]
UPDATE C
SET C.Dst = C.Src
FROM Counted C
WHERE C.Cnt = 1;
Tùy thuộc vào trường hợp sử dụng và ngữ cảnh của bạn, tôi sẽ cân nhắc sử dụng COLLATE thay vì LOWER[].
hình ảnh. png [3. 8 KiB]
Bình luận
Hiển thị nhận xét 0
Bình luận
5. Cần 1600 ký tự còn lại ký tự
▼
- Hiển thị cho tất cả người dùng
- Hiển thị với người đăng gốc & Microsoft
- Người kiểm duyệt có thể xem
- Có thể xem bởi người kiểm duyệt và người đăng gốc
- Khả năng hiển thị nâng cao
tệp đính kèm. Có thể sử dụng tối đa 10 tệp đính kèm [bao gồm cả hình ảnh] với tối đa 3. 0 MiB mỗi cái và 30. tổng cộng 0 MiB
MelissaMa-msft đã trả lời • Ngày 15 tháng 10 năm 20 | MelissaMa-msft đã nhận xét • Ngày 28 tháng 10 năm 20
Xin chào @CharanP-5854,
Vui lòng cung cấp các câu lệnh CREATE TABLE cho các bảng của bạn cùng với các câu lệnh INSERT với dữ liệu mẫu thay vì chỉ cung cấp một ảnh chụp nhanh vì tất cả những người trợ giúp cần dành nhiều thời gian để tạo và chèn các bảng này
Tôi vẫn còn một số lo ngại về yêu cầu của bạn. Vui lòng kiểm tra giúp
Trong truy vấn của bạn, ngày 1 phải là trong 3 tháng qua. Ví dụ: 'Amazon. com' có ngày là '2020-07-01' nhưng xuất hiện trong đầu ra mong muốn của bạn
Làm thế nào để tính số đếm và đánh giá số đếm là 1?
Tôi đã cố gắng nhận xét điều kiện của date1 trong 3 tháng qua trong truy vấn và thực hiện một số sửa đổi đối với truy vấn của bạn
Tôi có thể nhận được kết quả giống như trong ảnh chụp nhanh của bạn. Bạn có thể kiểm tra xem nó có hữu ích cho bạn không
drop table if exists [TABLE1]
drop table if exists [TABLE2]
create table [TABLE1]
[Retails varchar[100],
Products varchar[100],
[DATE1] date
]
create table [TABLE2]
[
Products varchar[100],
Retails varchar[100]
]
insert into [TABLE1] values
['Walmart','Vegetables','2019-11-10'],
['Amazon.com','Bakery fresh','2020-07-01'],
['The Kroger Co.','Snaks & candy','2020-8-1'],
['Costco','Meat &Seafood','2020-08-08'],
['Walmart','Clothes','2020-09-25'],
['Costco','Vegetables','2020-09-25'],
['Costco','Bakery fresh','2020-08-08'],
['Costco','Snaks & candy','2020-09-25'],
['Costco','Meat &Seafood','2020-08-08'],
['Costco','Clothes','2020-08-08'],
['Walgreens Boots Alliance','Clothes','2020-07-18'],
['Dollar General','Clothes','2020-06-18'],
['Dollar General','Bakery fresh','2020-07-20']
insert into [TABLE2][Products] values
['Vegetables'],
['Bakery fresh'],
['Snaks & candy'],
['Meat &Seafood'],
['Clothes'],
['Vegetables'],
['Bakery fresh'],
['Snaks & candy'],
['Meat &Seafood'],
['Clothes'],
['Clothes'],
['Clothes'],
['Bakery fresh']
;with cte as [
SELECT T1.[Retails],COUNT[T1.[Retails]] CNT
FROM [DBO].[TABLE1] T1
WHERE T1.[Retails] ' ' AND [T1.Products] ' '
--AND T1.[DATE1] >= DATEADD[MONTH, -3, GETDATE[]]
--AND T1.[DATE1] < GETDATE[]
GROUP BY T1.[Retails]
]
, cte2 as
[
select Retails,Products
from [DBO].[TABLE1]
where Retails in [select Retails from cte where cnt=1]
and [Retails] ' ' AND [Products] ' '
--AND [DATE1] >= DATEADD[MONTH, -3, GETDATE[]]
--AND [DATE1] < GETDATE[]
]
,cte3 as [
select Products,count[Products] count from cte2
group by Products]
UPDATE T2
SET T2.[Retails] = T1.Retails
FROM [DBO].TABLE2 T2
JOIN cte2 T1
ON LOWER[T2.Products] = LOWER[T1.Products]
inner join cte3 t3
on t3.Products=t2.Products
where t3.count=1
select * from [TABLE2]
đầu ra
________số 8Trân trọng
Melissa
Nếu câu trả lời hữu ích, vui lòng nhấp vào "Chấp nhận câu trả lời" và bình chọn cho câu trả lời đó.
Lưu ý. Vui lòng làm theo các bước trong tài liệu của chúng tôi để bật thông báo qua e-mail nếu bạn muốn nhận thông báo qua email liên quan cho chủ đề này.
Bình luận
Nhận xét · Hiển thị 5
Bình luận
5. Cần 1600 ký tự còn lại ký tự
▼
- Hiển thị cho tất cả người dùng
- Hiển thị với người đăng gốc & Microsoft
- Người kiểm duyệt có thể xem
- Có thể xem bởi người kiểm duyệt và người đăng gốc
- Khả năng hiển thị nâng cao
tệp đính kèm. Có thể sử dụng tối đa 10 tệp đính kèm [bao gồm cả hình ảnh] với tối đa 3. 0 MiB mỗi cái và 30. tổng cộng 0 MiB
Xin chào @CharanP-5854,
Bạn có thể vui lòng xác thực truy vấn trên xem nó có hữu ích hay không và cung cấp bất kỳ bản cập nhật nào?
Hãy nhớ chấp nhận câu trả lời nếu họ giúp. Hành động của bạn sẽ hữu ích cho những người dùng khác gặp vấn đề tương tự và đọc chủ đề này.
Cảm ơn bạn đa hiểu
Trân trọng
Melissa
0 Phiếu bầu 0 ·
CharanP-5854 MelissaMa-msft · 16/10/2020 lúc 12. 03 giờ chiều
Chào Melissa,
Đã thử nó không hoạt động trong tất cả các kịch bản, vì vậy tôi đang cố gắng khắc phục. Một trong những giải pháp tôi tìm thấy là trong truy vấn trên cùng với tất cả các truy vấn để thêm có @count =1 ;
0 Phiếu bầu 0 ·
MelissaMa-msft CharanP-5854 · 20/10/2020 lúc 06. 01 giờ sáng
Xin chào @CharanP-5854,
Sẽ tốt hơn nếu bạn cung cấp thêm chi tiết về các tình huống không hoạt động để chúng tôi có thể kiểm tra thêm