When the following query is executed shows the following error - database

INSERT INTO tbl_vacancy_poojai
(vc_serial_no,vc_poojai_name,vc_poojai_amount,vc_poojai_time,
vc_book_date,vc_vacancy,vc_bok_poj,vc_type,vc_block)
VALUES (
(SELECT vc_serial_no FROM tbl_tot_vacancy_poojai),
(SELECT vc_poojai_name FROM tbl_tot_vacancy_poojai),
(SELECT vc_poojai_amount FROM tbl_tot_vacancy_poojai),
(SELECT vc_poojai_time FROM tbl_tot_vacancy_poojai),
'04/02/2018',
(SELECT vc_vacancy FROM tbl_tot_vacancy_poojai),
('04/02/2018'+(SELECT vc_serial_no FROM tbl_tot_vacancy_poojai)),
(SELECT vc_type FROM tbl_tot_vacancy_poojai),1)
Subquery returned more than 1 value. This is not permitted when the
subquery follows =, !=, <, <= , >, >= or when the subquery is used as
an expression.**strong text
Can anyone guide me to solve this?

Good try. This is more like what you want:
INSERT INTO tbl_vacancy_poojai
(vc_serial_no,vc_poojai_name,vc_poojai_amount,vc_poojai_time,
vc_book_date,vc_vacancy,vc_bok_poj,vc_type,vc_block)
SELECT vc_serial_no,vc_poojai_name,vc_poojai_amount,
vc_poojai_time '04/02/2018',vc_vacancy,
'04/02/2018'+vc_serial_no,vc_type
FROM tbl_tot_vacancy_poojai
'04/02/2018'+vc_serial_no might not do what you think it does

The error occurred because of your select query returns more than one row. you need to select one record only to insert from the sub query. So specify the where condition or use select top 1.

Related

How to dynamically replace a column value with another value based on condition

I am trying to dynamically change field value using a select query based on the person's previous room number.
Below are the data sample and the query I have tried. But it is throwing an error saying that there are multiple values returned by the inner query.
,A.[Room],A.[CSR],A.[MemberShip],A.[NatCode]
,A.[MarketCode],A.[Adult],A.[Children],A.[ArrDate]
,A.[DepDate],A.[ResvStatus], CASE WHEN A.[Room]>9000 THEN (SELECT MIN(A.[Room])FROM [RESDETAILS] C WHERE C.GuestName=A.GuestName) ELSE A.[Room] END AS [Room]
FROM [ITHAAFUSHI].[dbo].[RESDETAILS] A
WHERE [GuestName]= 'Mr Jobin Joseph'
GROUP BY
A.[BusinessDate],A.[GuestName],A.[TravelAgent]
,A.[Room],A.[CSR],A.[MemberShip],A.[NatCode]
,A.[MarketCode],A.[Adult],A.[Children],A.[ArrDate]
,A.[DepDate],A.[ResvStatus]
"Subquery returned more than 1 value. This is not permitted when the
subquery follows =, !=, <, < =,>, >= or when the subquery is used as
an expression."
Below is the expected result when Room No is >9000
Your (SELECT MIN(A.[Room])FROM [RESDETAILS] C WHERE C.GuestName=A.GuestName)
return more than 1 row so you need to use group by inside :
SELECT MIN(A.[Room])FROM [RESDETAILS] C WHERE C.GuestName=A.GuestName GROUP BY C.GuestName)

Repeating values in single-column table

I know this title isn't the best one, but i couldn't formulate a better one.
I have a function similar to STRING_SPLIT(), which return a single-column table with one row per split. What i need to do is keep the values from the other columns the same in the new rows.
I have a #TEMP Table with many lines like the following one:
INSERT INTO #TEMP([A], [ToSplit], [C], [D]) SELECT '549618', 'AAA, BBB', '1.7', '6'
I want to turn that line into two lines, one with AAA, the other with BBB, with the other values remaining equal.
I tried in the select list:
SELECT *, (SELECT * FROM [dbo].[ufn_split](ToSplit,',')) FROM #TEMP
ERROR: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Then as a condition (i used IN because it's the only that allow subqueries):
SELECT A, ToSplit FROM #TEMP
WHERE ToSplit IN (SELECT * FROM [dbo].[ufn_split](ToSplit,','))
No errors, but it only returns the rows that don't need the split. It would only work with LIKE, which is not allowed.
So i tried to put a subquery inside the method to create a single column table with one split value per row, that i would go row by row, use `LIKE %ToSplit% on the #TEMP, but again, subqueries not allowed.
SELECT * FROM [dbo].[ufn_split]((SELECT ToSplit FROM #TEMP),',')
ERROR: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
My question is, how can i split the values in ToSplit and keep the other columns values?
Please try like this .use CROSS APPLY
SELECT *
FROM #TEMP
CROSS APPLY
(
SELECT * FROM [dbo].[ufn_split](ToSplit,',')
)u
that will work on SQL SERVER 2016 and to unlimited values.
SELECT
t.*, LTRIM([value])
FROM #TEMP t
CROSS APPLY string_split([ToSplit], ',')

inserting multiple rows into SQL

I'm trying to insert lots of rows into a 2 column table at once where one of the values remains constant. This is what I have tried: -
insert into testtable (value1,value2)
select
123,
( SELECT [title] FROM [dbo].[images])
This gives me the following error:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
I could insert each row one at a time but I was wondering if there is a way I g=could do the whole lot in one go.
You have a syntax error, do not put two SELECT in there :
INSERT INTO testtable (value1,value2)
SELECT 123, [title]
FROM [dbo].[images];

Calculation between table with multiple rows

I am encountering a problem of doing calculation between table in multiple rows.
This is my code:
UPDATE StockList
SET stkQuantity = stkQuantity - (SELECT quantity FROM mCalculate)
WHERE stkID = (SELECT stkID FROM mCalculate)
If table mCalculate has only one row of data, the calculation in StockList is successfully, but if table mCalculate has multiple rows of data, I get an error:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Can anyone help me solve this problem and explain to me what's the problem I am having?
Image to refer:
Window:
Database:
You have to use join instead of sub query in this case
UPDATE S
SET stkQuantity = stkQuantity - M.quantity
From stocklist s
Join mcalculate m
On s.stkid = m.stkid
Among other issues, this line here:
WHERE stkID = (SELECT stkID FROM mCalculate)
The = needs a single value, so unless your mCalculate table has only 1 row you will be getting errors.
Your error of: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. is most likely due to the WHERE clause.
Your sub-select
(SELECT quantity FROM mCalculate)
Needs a WHERE clause that ensures this select returns only one row. Ditto for this:
(SELECT stkID FROM mCalculate)
Without the SCHEMA definitions for these tables, it's hard to help you figure out exactly what that WHERE clause should be.

Comparing a date between mutiple lines SQL Server

first off, sorry for my bad English, I'm a French Canadian.
I'm trying to compare one datetime between mutliple start datetime and end datetime, but my query doesn't work and SQL Server gives me this error: "Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."
SELECT V.SampleTime,
V.OrderNo,
V.VNCCode,
V.VNCDescription,
V.NrOfOccurences,
V.Comment
FROM AV_RPT_FQC_Visual V
INNER JOIN AV_RPT_PO_Header H
ON H.OrderNo=V.OrderNo
WHERE H.LinkUp IN (SELECT * FROM #iLinkupID)
AND (V.NrOfOccurences > 0 or V.VNCCode = '00.00.00')
-- This part doesn't work --> AND SampleTime between (Select ShiftStart From #shifts) and (Select ShiftEnd From #shifts)
ORDER BY SampleTime, VNCCode
Thank you a lot. :)
Try
AND SampleTime between (Select min(ShiftStart) From #shifts) and (Select max(ShiftEnd) From #shifts)
Based on your comments, you may want try this. P.S., I'm Canadian too :)
AND EXISTS (Select 1 From #shifts ss WHERE V.SampleTime BETWEEN ss.ShiftStart AND ss.ShiftEnd)

Resources