RASHID ALI786 Ответов: 3

Как получить данные в столбце с помощью SQL


Привет добрый день всем разработчикам здесь
Я хочу знать, как получить данные из таблицы, которые находятся в разных строках и
Покажите эти данные в Столбцах

У меня есть таблица со следующими полями.
Name	Date	        TimeCL	               Detail
Rashid Ali	2017-12-05	09:22:56.0000000	IN
Rashid Ali	2017-12-05	10:14:33.0000000	OUT
Rashid Ali	2017-12-14	09:00:45.0000000	IN
Rashid Ali	2017-12-14	14:08:53.0000000	OUT


и я хочу получить такие данные.
Name	Date	        Time IN                 Time Out
Rashid Ali	2017-12-05	09:22:56.0000000      10:14:33.0000000	
Rashid Ali	2017-12-14	09:00:45.0000000      14:08:53.0000000


Может ли кто-нибудь помочь мне, чтобы у меня было хорошее начало

Спасибо

Что я уже пробовал:

Я пытаюсь это сделать но это дает мне неправильные данные

Цитата:
Выберите Std_InfoTB.Name, AttendanceTb.Date, AttendanceTb.TimeCL, AttendanceTb_1.TimeCL AS Expr1
Из внутреннего соединения Std_InfoTB
AttendanceTb ON Std_InfoTB.Std_ID = AttendanceTb.Std_ID внутреннее соединение
AttendanceTb как AttendanceTb_1 на Std_InfoTB.Std_ID = AttendanceTb_1.Std_ID
Где (AttendanceTb.Std_ID = 21) и (месяц(AttendanceTb.Date) = 12) и (год(AttendanceTb.Date) = 2017) и (AttendanceTb.Detail = N'IN') и
(AttendanceTb_1.Деталь = Н выгоняя')

3 Ответов

Рейтинг:
2

Rajesh Ku Swain

Привет,

Попробуйте приведенный ниже код, он может решить вашу проблему. Если у вас возникнут какие-либо проблемы, дайте мне знать.


выбрать Т1.Наименование,Т1.Дата,Т1.TimeCL как 'время', Т2.TimeCL как "тайм-аут"
из таблицы t1 соедините таблицу t2 на t1.Date=t2.Date
где t1.Details='IN' и t2.Details='OUT'


RASHID ALI786

Привет, Раджеш.
Я попробовал, но ничего не вышло...

У меня есть таблица посещаемости, и в ней есть 16 записей о студенте, имеющем ID 21
Но использование вышеприведенного запроса дает мне больше, чем это...

своеобразный рекорд
Atd_ID Std_ID Дата Детализация TimeCL MessageIN MessageOut
88 21 2017-12-04 OUT 13:55:02.0000000 0 1
93 21 2017-12-05 в 09:22:56.0000000 1 0
96 21 2017-12-05 OUT 10:14:33.0000000 0 1
98 21 2017-12-14 в 09:00:45.0000000 1 0
106 21 2017-12-14 OUT 14:08:53.0000000 0 1
114 21 2017-12-15 в 09:30:48.0000000 1 0
115 21 2017-12-15 OUT 10:03:14.0000000 0 1
125 21 2017-12-16 в 09:34:05.0000000 1 0
127 21 2017-12-16 OUT 11:46:00.0000000 0 1
128 21 2017-12-18 в 08:53:55.0000000 1 0
137 21 2017-12-18 OUT 14:18:11.0000000 0 1
142 21 2017-12-19 в 08:51:36.0000000 1 0
147 21 2017-12-19 OUT 14:00:18.0000000 0 1
152 21 2017-12-20 в 09:10:32.0000000 1 0
156 21 2017-12-20 OUT 13:10:52.0000000 0 1
164 21 2017-12-21 в 09:11:22.0000000 1 0


Извлеченная Запись

Std_ID Дата Время в тайм-аут
21 2017-12-05 09:22:56.0000000 10:14:33.0000000
21 2017-12-05 09:22:56.0000000 13:30:11.0000000
21 2017-12-14 09:00:45.0000000 14:07:03.0000000
21 2017-12-14 09:00:45.0000000 14:08:53.0000000
21 2017-12-14 09:00:45.0000000 14:16:17.0000000
21 2017-12-14 09:00:45.0000000 16:55:39.0000000
21 2017-12-15 09:30:48.0000000 10:03:14.0000000
21 2017-12-15 09:30:48.0000000 10:03:20.0000000
21 2017-12-15 09:30:48.0000000 10:03:30.0000000
21 2017-12-15 09:30:48.0000000 12:30:18.0000000
21 2017-12-15 09:30:48.0000000 12:55:09.0000000
21 2017-12-15 09:30:48.0000000 14:55:08.0000000
21 2017-12-16 09:34:05.0000000 11:46:00.0000000
21 2017-12-18 08:53:55.0000000 13:19:44.0000000
21 2017-12-18 08:53:55.0000000 14:10:39.0000000
21 2017-12-18 08:53:55.0000000 14:18:11.0000000
21 2017-12-18 08:53:55.0000000 14:36:09.0000000
21 2017-12-19 08:51:36.0000000 14:00:18.0000000
21 2017-12-19 08:51:36.0000000 14:00:26.0000000
21 2017-12-19 08:51:36.0000000 14:00:36.0000000
21 2017-12-20 09:10:32.0000000 13:10:52.0000000
21 2017-12-20 09:10:32.0000000 15:56:56.0000000
21 2017-12-20 09:10:32.0000000 16:43:15.0000000
21 2017-12-21 09:11:22.0000000 12:33:04.0000000
21 2017-12-21 09:11:22.0000000 12:58:44.0000000

Как вы видите, в исходной записи есть две строки одной и той же даты, одна для "TimeIN", а другая для "TimeOut", и я хочу показать запись в одной строке с "TimeIN" и "TimeOut" в разных столбцах...

Надеюсь, вы понимаете, что я пытаюсь сказать....

Спасибо.

Рейтинг:
12

Santosh kumar Pithani

CREATE TABLE #Temp(Name Varchar(50),Dts Date,TimeCL Time,Detail varchar(20));

INSERT INTO #TEMP 
                 VALUES('Rashid Ali','2017-12-05','09:22:56.0000000','IN'),
                       ('Rashid Ali','2017-12-05','10:14:33.0000000','OUT'),
                       ('Rashid Ali','2017-12-14','09:00:45.0000000','IN'),
                       ('Rashid Ali','2017-12-14','14:08:53.0000000','OUT');
                 
SELECT Name,
       Dts,
	   MAX(CASE WHEN Detail='IN' THEN TIMECl END) AS TimeIN,
	   MAX(CASE WHEN Detail='out' THEN TIMECl END) AS TimeOut 
  FROM #Temp GROUP BY Name,Dts;

OUTPUT:-
----------------------------------------------------------
 Name	       Dts	     TimeIN	           TimeOut
 -------------------------------------------------------------
Rashid Ali	2017-12-05	09:22:56.0000000	10:14:33.0000000
Rashid Ali	2017-12-14	09:00:45.0000000	14:08:53.0000000


Рейтинг:
0

Mike Ahrens

This is a simple Pivot solution. There is an excellent article at:
https://www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query


Не разбивайте дату и время на отдельные столбцы, это плохая практика. Кроме того, вот простое решение:
DECLARE @T TABLE(
	Atd_ID	int,
	Std_ID int,
	transDate date,
	Detail nvarchar(10),
	TimeCL time,
	MessageIN bit,
	MessageOut bit
)

INSERT INTO @T VALUES
(88,21,'2017-12-04','OUT','13:55:02.0000000',0,1),
(93,21,'2017-12-05','IN','09:22:56.0000000',1,0),
(96,21,'2017-12-05','OUT','10:14:33.0000000',0,1),
(98,21,'2017-12-14','IN','09:00:45.0000000',1,0),
(106,21,'2017-12-14','OUT','14:08:53.0000000',0,1),
(114,21,'2017-12-15','IN','09:30:48.0000000',1,0),
(115,21,'2017-12-15','OUT','10:03:14.0000000',0,1),
(125,21,'2017-12-16','IN','09:34:05.0000000',1,0),
(127,21,'2017-12-16','OUT','11:46:00.0000000',0,1),
(128,21,'2017-12-18','IN','08:53:55.0000000',1,0),
(137,21,'2017-12-18','OUT','14:18:11.0000000',0,1),
(142,21,'2017-12-19','IN','08:51:36.0000000',1,0),
(147,21,'2017-12-19','OUT','14:00:18.0000000',0,1),
(152,21,'2017-12-20','IN','09:10:32.0000000',1,0),
(156,21,'2017-12-20','OUT','13:10:52.0000000',0,1),
(164,21,'2017-12-21','IN','09:11:22.0000000',1,0);

SELECT * FROM 
(SELECT Std_ID, transDate, MessageIN, TimeCL  FROM @T)
AS s
PIVOT
(
	MAX(TimeCL)
	FOR MessageIN IN ([1],[0])
) AS p


Ваши результаты будут выглядеть так:
Std_ID	transDate	1	0
21	2017-12-04	NULL	13:55:02.0000000
21	2017-12-05	09:22:56.0000000	10:14:33.0000000
21	2017-12-14	09:00:45.0000000	14:08:53.0000000
21	2017-12-15	09:30:48.0000000	10:03:14.0000000
21	2017-12-16	09:34:05.0000000	11:46:00.0000000
21	2017-12-18	08:53:55.0000000	14:18:11.0000000
21	2017-12-19	08:51:36.0000000	14:00:18.0000000
21	2017-12-20	09:10:32.0000000	13:10:52.0000000
21	2017-12-21	09:11:22.0000000	NULL


Я надеюсь, что это соответствует вашим требованиям.