Преобразование столбца в строку в SQL Select
Я ищу, чтобы преобразовать столбец в строку, где столбец является select statment, а затем конкат с другим столбцом. Вот где моя путаница возникает при использовании CONVERT или CAST.
пример:
SELECT employeeID
,name
,location
,(SELECT COUNT(DISTINCT loginsFailed)
FROM users
WHERE (users.employeedID = userDetails.employeeID)
AND (users.startdate = 01-01-2013) as LoginCountFailed
,(SELECT COUNT(DISTINCT logins)
FROM users
WHERE (users.employeedID = userDetails.employeeID)
AND (users.startdate = 01-01-2013) as LoginCount
FROM userDetails
теперь этот запрос отлично работает в том, что предоставляет правильное количество логинов и не удалось как целые числа. Однако я хочу использовать это целое число в качестве строки, чтобы я мог один столбец. Есть причина, почему это должно быть один столбец, как строка.
Я хочу иметь только 4 колонки, а не 5. Колонны входа я хочу, чтобы это loginCountFailed/LoginCount. Например: 3/12. Мне нужно это как строка, потому что вы не можете разделить на 0, и есть моменты, когда знаменатель равен 0.
6 ответов
для concatanating чисел в MSSQL-2005 следует использовать литой
CAST(loginsFailed AS VARCHAR(10)) + '/' + CAST(LoginCount AS VARCHAR(10))
loginsFailed и loginCount выше на самом деле ваш select count distinct
фрагментов
Я надеюсь, что это работает
CAST ((SELECT COUNT(DISTINCT loginsFailed) FROM users WHERE users.employeedID = userDetails.employeeID AND users.startdate = 01-01-2013) AS VARCHAR(10))
+ '/' +
CAST ((SELECT COUNT(DISTINCT logins) FROM users WHERE users.employeedID = userDetails.employeeID AND users.startdate = 01-01-2013) AS VARCHAR(10))
DECLARE @i int
SET @i=98235
--Method 1 : Use CAST function
SELECT CAST(@i as varchar(10))
--Method 2 : Use CONVERT function
SELECT CONVERT(varchar(10),@i)
--Method 3 : Use STR function
SELECT LTRIM(STR(@i,10))
что ты хочу чтобы сделать, это иметь оператор case для обработки деления на нулевую логику, а не переключаться на строку для числовых данных.
SELECT employeeID
,name
,location
,(SELECT CASE WHEN COUNT(DISTINCT logins) = 0 then 0 ELSE
COUNT(DISTINCT loginsFailed) / COUNT(DISTINCT logins)
END
FROM users
WHERE (users.employeedID = userDetails.employeeID)
AND (users.startdate = 01-01-2013) ) as LoginFailRatio
FROM userDetails
вы можете сделать следующее С помощью
CAST
илиCONVERT
:
CONVERT(VARCHAR(20), YourIntColumn)
или
CAST(YourIntColumn AS VARCHAR(20))
Я думаю, вы можете просто создать внешний запрос здесь:
SELECT u.employeeID, u.name, u.location,
CONVERT(varchar(10), u.LoginCountFailed) + '/' + CONVERT(varchar(10), u.LoginCount) "Ratio"
FROM
(
SELECT employeeID
,name
,location
,(SELECT COUNT(DISTINCT loginsFailed)
FROM users
WHERE (users.employeedID = userDetails.employeeID)
AND (users.startdate = 01-01-2013) as LoginCountFailed
,(SELECT COUNT(DISTINCT logins)
FROM users
WHERE (users.employeedID = userDetails.employeeID)
AND (users.startdate = 01-01-2013) as LoginCount
FROM userDetails
) u