상당은 '천하의 등줄기'라 불리며, "중주(中原)를 내려다보고, 하동과 병주를 팔꿈치처럼 지지하고 있으므로 진(晉)나라의 목咽喉라 일컬을 만하다"고 할 정도로 형세가 매우 요충지였다. 그래서 옛날부터 병가가 반드시 다투는 전략적 요지였다. 기원전 402년, 위(魏)·조(趙)·한(韓) 삼가가 진(晉)나라를 나누어 가졌을 때, 상당은 한나라에 속하게 되었다. 그러나 세력이 강해진 진나라는 상당을 오래전부터 노리고 있었다. 기원전 280년, 진나라의 장수 백기(白起)가 상당 깊숙이 침입해 광랑성(光狼城, 지금의 고평(高平) 강영촌(康營村))을 함락시킨 바 있다. 이때 진나라가 상당을 집어삼키려는 입이 벌어진 상황이었으나, 당시 진나라와 초나라 사이의 전쟁이 긴박했기 때문에 군대를 철수해 상황을 일단 수습한 바 있다. 이후 진나라가 초나라와의 전쟁에서 승리하자, 기원전 262년에 다시 상당을 강하게 압박하였다.
진소왕 45년(기원전 262년), 진나라가 상당을 공격하자, 한나라 상당군의 수령 펑팅(馮亭)은 진나라에 항복하기를 원치 않고, 자진하여 상당을 조나라에 바쳤고, 화양군(華陽君)에 봉해졌다. 조나라의 명장 렌포(廉頗)는 상당 남쪽 경계에 군대를 주둔시켜 진나라 군대에 맞섰다. 조군은 오늘날 창치현(長治縣) 팔의향(八義鄕)의 동평(東坪), 서평(西坪)에 주둔하였으며, 석후보(石後堡)에 요새를 구축해 삼관(三關) 요로를 장악하고, 진나라 군대와 3년간 맞서 싸웠다.
진소왕 47년(기원전 260년), 범저(范雎)가 반간계(反間計)를 써서 조효성왕(趙孝成王)으로 하여금 전투를 전혀 모르는 조괄(趙括)을 장수로 교체하도록 유도하였다. 거만한 조괄은 렌포의 전술을 바꾸고, 대군을 이끌고 맹목적으로 공격을 개시하며, 동영(東營), 서영(西營), 석후보 주둔군에게 명령하여 장평(長平, 오늘날 창치현과 고평시의 경계 지역)으로 진격하도록 강제하였다.
이때 진소왕은 특별히 전공이 뛰어나고 적국을 진두지진(震懾)시킨 무안군(武安君) 백기를 주장군으로 임명하였다. 백기는 조괄의 무모하고 경솔하며 전투 경험 부족한 약점을 파악하고, 적을 깊숙이 유인한 후 우회 포위하는 전술을 채택했다. 결전 초기에 일부러 후퇴하는 척하였다. 조괄은 더욱 오만해져 전력을 다해 추격하며, 승리를 타고 진나라 진영까지 밀고 들어갔다. 진나라 군대의 본진은 성벽을 굳게 지키며, 조괄의 방심을 틈타 기습 병력을 두 갈래로 보내 공격했다. 하나는 2만 5천의 경기병으로, 조군 후방으로 빠르게 진격하여 진령(秦嶺, 별칭 보산(寶山), 오늘날 고평시, 린촨, 창치현의 접경 지역)을 점령해 조군의 후퇴로를 차단하고, "조군의 구원병과 식량 공급을 완전히 끊어버렸다." 다른 하나는 5천의 정예병으로, 조군의 중앙을 가르며 군대를 두 토막 내어 통합 지휘를 불가능하게 만들었고, 앞뒤가 서로 도와줄 수 없는 지경에 이르게 했다. 조군은 순식간에 가마솥 속의 물고기 꼴이 되고 말았다. 이때 백기는 정지(靜止)로 동(動)을 제어하는 전략을 취했다. 7월 중순부터 9월까지 조군은 무려 46일 동안 포위당했고, 식량과 물이 모두 떨어져 서로를 잡아먹으며 전투를 하기도 전에 스스로 혼란에 빠졌다. 조괄은 네 차례 탈출을 시도했으나, 결국 화살을 맞아 전사하고 말았다. 조군은 주력을 잃고 즉각 혼란에 빠졌다. 진나라 군대는 틈을 타 맹렬한 공격을 개시했고, 조군은 무기를 버리고 갑옷을 벗은 채 전군 항복했다. 이들은 백기에 의해 현재 고평시의 왕난(王赧, 살곡이라 불리며 별칭 지원곡(脊冤谷)), 화살머리, 위성(圍城), 곡구(谷口), 금문산(金門山) 일대에서 생매장 당했다. 조괄의 공론(空論)과 빈말로 인해 만여 명의 장병들의 목숨이 생매장당했다. 야만적이고 잔혹한 대학살로 수만 명의 장병들이 강물처럼 피를 흘렸고, 조괄 자신도 결국 목숨을 잃고 말았다!